2024-08-21:用go语言,给定一个从 0 开始索引的整数数组 nums 和一个整数 k,请设计一个算法来使得数组中的所有元素都大于或等于 k,返回所需的最少操作次数。 每次操作可以执行以下步骤

news/2024/11/16 2:40:55/文章来源:https://www.cnblogs.com/moonfdd/p/18372056

2024-08-21:用go语言,给定一个从 0 开始索引的整数数组 nums 和一个整数 k,请设计一个算法来使得数组中的所有元素都大于或等于 k,返回所需的最少操作次数。

每次操作可以执行以下步骤:

1.选择数组中最小的两个整数 x 和 y。

2.从数组中删除 x 和 y。

3.计算 min(x, y) * 2 + max(x, y) 的值,将其添加回数组中的任意位置。

重复执行上述步骤,直到数组中的所有元素都大于或等于 k。

请确保数组中至少有两个元素才能执行操作。

请根据上述要求重新设计一个算法,使得在最少的操作次数内,所有数组元素都大于或等于 k。

输入:nums = [2,11,10,1,3], k = 10。

输出:2。

解释:第一次操作中,我们删除元素 1 和 2 ,然后添加 1 * 2 + 2 到 nums 中,nums 变为 [4, 11, 10, 3] 。

第二次操作中,我们删除元素 3 和 4 ,然后添加 3 * 2 + 4 到 nums 中,nums 变为 [10, 11, 10] 。

此时,数组中的所有元素都大于等于 10 ,所以我们停止操作。

使数组中所有元素都大于等于 10 需要的最少操作次数为 2 。

答案2024-08-21:

chatgpt

题目来自leetcode3066。

大体步骤如下:

1.创建一个结构体 hp,包含一个 sort.IntSlice 数组,用于存储传入的整数数组 nums。

2.初始化 hp 结构体,将 nums 存入其中,并将其转换为最小堆结构。

3.进入循环,判断最小堆中的最小值是否小于等于 k,若是则执行以下步骤,否则结束循环:

3.a. 从最小堆中弹出最小值 x。

3.b. 将 x 值加倍,再放回最小堆对的顶部,并修正堆结构。

3.c. 计数器 ans 自增1,表示执行了一次操作。

4.返回最少操作次数 ans。

总的时间复杂度:

  • 初始化堆结构时间复杂度为 O(n)。

  • 每次循环中从堆中弹出元素、修改堆结构的时间复杂度为 O(log(n)),最多执行 n 次。

因此,总的时间复杂度为 O(n log n)。

总的额外空间复杂度:

  • 除了存储输入数组外,额外使用了堆结构来维护最小值,因此额外空间复杂度为 O(n)。

Go完整代码如下:

package mainimport ("fmt""container/heap""sort"
)func minOperations(nums []int, k int) (ans int) {h := &hp{nums}heap.Init(h)for h.IntSlice[0] < k {x := heap.Pop(h).(int)h.IntSlice[0] += x * 2heap.Fix(h, 0)ans++}return
}type hp struct{ sort.IntSlice }func (hp) Push(any)    {}
func (h *hp) Pop() any { a := h.IntSlice; v := a[len(a)-1]; h.IntSlice = a[:len(a)-1]; return v }func main() {nums := []int{2, 11, 10, 1, 3}k := 10fmt.Println(minOperations(nums, k))
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-import heapqclass Hp(list):def push(self, item):heapq.heappush(self, item)def pop(self):return heapq.heappop(self)def minOperations(nums, k):h = Hp(nums)heapq.heapify(h)ans = 0while h[0] < k:x = h.pop()h[0] += x * 2heapq.heappushpop(h, h[0])ans += 1return ansnums = [2, 11, 10, 1, 3]
k = 10
print(minOperations(nums, k))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784912.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨域、JSONP、CORS、Spring、Spring Security解决方案

概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。跨域是浏览器(如Chrome浏览器基于JS V8引擎,可以简单理解为JS解释器)的一种同源安全策略,是浏览器单方面限制脚本的跨域访问。因此,仅有客户端运行在浏览器时才存在跨域问题,才需要考虑如何解决这个问…

使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验

前言 当前.NET环境下,生成WebApi代理类的工具已经有很多选择了,比如OpenApi Generator,NSwag和Refitter等,不同的工具生成的代码风格以及实现方式略有不同,比如Refitter生成的客户端是Refit风格. 本人比较喜欢Refit风格的标注风格因此还是比较喜欢使用Refitter的,TA生成的代码风…

039、Vue3+TypeScript基础,路由中使用redirect来重定向

01、index.ts代码如下://创建路由并暴露出去 import {createRouter, createWebHistory} from vue-router import Home from @/view/Home.vue import About from @/view/About.vue import News from @/view/News.vue import Detail from @/view/Detail.vueconst router = creat…

传习录

《传习录》 王阳明此心光明,亦复何言。 ◆ 徐爱录 2023/09/07发表想法 至善是心的本体,是内在的,只要我们把‘明明德’的工夫,做到“惟精、惟一”的程度就是至善。 大学之道,在明明德,在亲民,在止于至善。知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得…

mysql and != 条件判断,某字段为空,是否会影响结果

1.在单表查询中,会影响2.在left join 查询中,会影响 加上或者is null去掉或者is null sepo.budget_status != 2 。null也是!= 2 的,但是查不出来下班记得打卡

收拾混乱账密,IT特权账号管理实践分享

随着网络设备、服务器、应用等被管对象越来越多,而要访问这些被管对象,基本入口都会要求登录账密。 而处于安全的考虑,IT部门都会制定相应的密码策略,包括密码复杂度要求,密码有效期、密码重复度等。 如果您习惯使用纸质、Word、Excel等来记录众多账密,那么当您的设备丢失…

【Linux】python版本控制和环境管理

@目录1.查看目前python的版本2.添加软件源并更新3.选择你想要下载的版本4.警示:没必要设置默认版本误区千万千万不要覆盖python3软链接解决办法5.pip软件包管理最省心稍微麻烦换源网上有很多教程都是教导小白去官方下载之后编译安装。但是,小白连cmake是什么都不知道,这种教…

【WPF】WPF项目.exe可执行文件在非开发环境打不开

如题,做一个小工具,开发完之后把bin/release文件夹打包发他,但在他电脑打不开。 打开可靠性监视器: 按下 Win + S,在搜索栏中输入“控制面板”,然后点击进入。 在控制面板中选择 “系统和安全”。 然后选择 “安全与维护”。 在“安全与维护”窗口中,展开“维护”部分,…

poi的excel导出

poi的excel导出这个导出依赖于模板文件,可便捷设置表头样式。 也可以不使用模板,直接创建。1.引入poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version> </dependency…

postman实操

一、postman参数化 1、{{变量名}} 花括号,时两个括号在环境变量中设置变量参数,作用于所有的接口设置变量:当前所有的接口都可以调用这个参数get中设置变量: http://cms.duoceshi.cn/manage/loginJump.do?userAccount={{u1}}&loginPwd={{p1}} 二、断言 test中的内容详…

Apache SeaTunnel数据处理引擎适配的演进和规划

作者 | Chao Tian (tyrantlucifer),Apache SeaTunnel PMC Member 摘要 Apache SeaTunnel作为一个高性能数据同步工具,以其高效的数据处理能力,为数据集成领域带来了创新。在引擎上,Apache SeaTunnel除了支持自身的Zeta引擎外,还支持Spark和Flink。在2024年的CommunityOver…