2024-03-16:用go语言,给你一个正整数数组 nums,

每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。

(注意,在后续操作中你可以对减半过的数继续执行操作)

请你返回将 nums 数组和 至少 减少一半的 最少 操作数。

输入:nums = [5,19,8,1]。

输出:3。

答案2024-03-16:

来自左程云

灵捷3.5

大体步骤如下:

1.定义一个优先队列(PriorityQueue)来存储数组中的数字,优先级为数字的倒数。

2.计算数组中所有数字的和,并将和除以2得到目标值(sum)。

3.初始化操作次数(ans)为0,初始化当前减半的数值之和(minus)为0。

4.循环直到当前减半的数值之和(minus)大于等于目标值(sum):

  • 弹出优先队列中最大的数值(cur)。

  • 将弹出的数值除以2得到新的数值(cur/2)。

  • 将新的数值添加回优先队列中。

  • 更新操作次数(ans)加1。

  • 更新当前减半的数值之和(minus)加上新的数值(cur/2)。

5.返回操作次数(ans)作为结果。

总的时间复杂度为O(nlogn),其中n为数组的长度。堆操作的时间复杂度为O(logn)。

总的额外空间复杂度为O(n),需要额外的优先队列来存储数组中的数字。

Go完整代码如下:

package main

import (
"container/heap"
"fmt"
) type PriorityQueue []float64 func (pq PriorityQueue) Len() int {
return len(pq)
} func (pq PriorityQueue) Less(i, j int) bool {
return pq[i] > pq[j]
} func (pq PriorityQueue) Swap(i, j int) {
pq[i], pq[j] = pq[j], pq[i]
} func (pq *PriorityQueue) Push(x interface{}) {
item := x.(float64)
*pq = append(*pq, item)
} func (pq *PriorityQueue) Pop() interface{} {
old := *pq
n := len(old)
item := old[n-1]
*pq = old[0 : n-1]
return item
} func halveArray(nums []int) int {
pq := make(PriorityQueue, 0)
sum := 0.0
for _, num := range nums {
heap.Push(&pq, float64(num))
sum += float64(num)
}
sum /= 2
ans := 0
for minus := 0.0; minus < sum; ans++ {
cur := heap.Pop(&pq).(float64) / 2
minus += cur
heap.Push(&pq, cur)
}
return ans
} func main() {
nums := []int{5, 19, 8, 1}
result := halveArray(nums)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

import heapq

def halveArray(nums):
pq = []
sum = 0.0
for num in nums:
heapq.heappush(pq, -float(num))
sum += float(num)
sum /= 2
ans = 0
minus = 0.0
while minus < sum:
cur = -heapq.heappop(pq) / 2
minus += cur
heapq.heappush(pq, -cur)
ans += 1
return ans nums = [5, 19, 8, 1]
result = halveArray(nums)
print(result)

2024-03-16:用go语言,给你一个正整数数组 nums, 每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。 (注意,在后续操作中你可以对减半过的数继续执行操作)的更多相关文章

  1. C语言,输入一个正整数,按由大到小的顺序输出它的所有质数的因子(如180=5*3*3*2*2)

    #include <iostream> using namespace std; int main() { long num; while(cin >> num){ ){ co ...

  2. 【C语言】输入一个正整数,判断其是否为素数

    素数的定义: 素数(prime number)又称质数,有无限个. 素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为素数.代码1: #include<stdio.h& ...

  3. Wed Nov 01 13:03:16 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended.

    报错:Wed Nov 01 13:03:16 CST 2017 WARN: Establishing SSL connection without server's identity verifica ...

  4. C语言入门(16)——C语言的数组

    和结构体类似,数组也是一种复合数据类型,它由一系列相同类型的元素组成.C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必 ...

  5. Go语言笔记[实现一个Web框架实战]——EzWeb框架(一)

    Go语言笔记[实现一个Web框架实战]--EzWeb框架(一) 一.Golang中的net/http标准库如何处理一个请求 func main() { http.HandleFunc("/& ...

  6. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

  7. 智能合约语言 Solidity 教程系列5 - 数组介绍

    写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本文前半部分是参考Solidity官方文档(当前最新版本: ...

  8. C语言博客作业—字符数组

    一.PTA实验作业 题目1:字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 (1)定义i为循环变量,number用于存放每一次转化的结果,flag用于判断是否为负数,p用于修改结果的 ...

  9. Go 语言的下一个大版本:Go 2.0 被安排上了(全面兼容1.X,改进错误处理和泛型这两大主题)

    今年 8 月 Go 开发团队公布了 Go 2.0 的设计草案,包括错误处理和泛型这两大主题.现在备受瞩目的 Go 2.0 又有了新动向 —— 昨日 Go 开发团队在其官方博客表示,Go 2 已经被安排 ...

  10. C语言基础 (6) 类型转换,数组与随机数

    复习 1.隐式转换 Double a Int b = 1 A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换) 2.强制类型转换 (变量)类型名 Int a = 1 // ...

随机推荐

  1. 记录一则exachk进程占用大量CPU资源

    有Exadata客户在进行exachk巡检之后反馈,发现系统中,exachk进程占用了大量CPU资源. 了解之前的变更,只是巡检之前升级了AHF,然后进行标准的exachk巡检. 现象: 目前机器整体 ...

  2. .NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记

    16 | 选项数据热更新:让服务感知配置的变化 选项框架还有两个关键类型: 1.IOptionsMonitor 2.IOptionsSnapshot 场景: 1.范围作用域类型使用 IOptinsSn ...

  3. 【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I

    [LGR-148-Div.3]洛谷基础赛 #1 & MGOI Round I T1 luoguP9502 『MGOI』Simple Round I | A. 魔法数字 \(100pts\) 水 ...

  4. 【JS】一个思路搞定三道Promise并发编程题,手摸手教你实现一个Promise限制器

    壹 ❀ 引 之前在整理手写Promise相关资料时,在文章推荐区碰巧看到了一道手写Promise并发控制调度器的笔试题(大厂可能爱考),结果今天同事又正好问了我一个关于Promise调度处理的场景问题 ...

  5. NC24416 [USACO 2013 Nov G]No Change

    题目链接 题目 题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K ...

  6. NC51222 Strategic game

    题目链接 题目 题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he cannot ...

  7. springboot项目使用外置tomcat7部署项目

    Springboot使用外置tomcat7部署运行 1.pom修改 2.tomcat底下config下catalina.properties 3.在tomcat的lib文件夹下添加 javax.el- ...

  8. Oracle本地管理对比数据字典管理表空间

    Locally vs. Dictionary Managed Tablespaces 整理自:http://www.orafaq.com/node/3. When Oracleallocates sp ...

  9. SQLite 入门教程

    不是 MySQL 用不起,而是 SQLite 更有性价比,绝大多数的 Web 应用 SQLite 都可以满足. SQLite 是一个用 C 语言编写的开源.轻量级.快速.独立且高可靠性的 SQL 数据 ...

  10. dllimport 和 dllexport

    Dll 在需要暴露接口的头文件里添加 dllexport 声明,比如, #define DllExport __declspec( dllexport ) class DllExport C { in ...