首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年08月21日 16:03

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 main

import (
	"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 * 2
		heap.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 := 10
	fmt.Println(minOperations(nums, k))
}

在这里插入图片描述

Python完整代码如下:

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

import heapq

class 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 = 0
    while h[0] < k:
        x = h.pop()
        h[0] += x * 2
        heapq.heappushpop(h, h[0])
        ans += 1
    return ans

nums = [2, 11, 10, 1, 3]
k = 10
print(minOperations(nums, k))

在这里插入图片描述

From:https://www.cnblogs.com/moonfdd/p/18372056
本文地址: http://shuzixingkong.net/article/1303
0评论
提交 加载更多评论
其他文章 会员力量:非常感谢12+1位园友成为终身会员
昨天晚上18点左右,我们在 https://cnblogs.vip/ 上线了终身会员——终身PLUS会员与终身VIP会员。上线后,我们在会员微信群里发了群公告,企业微信发了朋友圈,在「.NET社群」微信群中发了一条消息。 到昨天晚上23:30,一共有12位园友成为终身会员,做二十年梦也没想到一个晚上
会员力量:非常感谢12+1位园友成为终身会员
【VMware VCF】VCF 5.2:部署整合架构的SDDC。
VMware 前不久发布了 VMware Cloud Foundation 5.2 版本,并带来了许多功能的升级,比如支持 vSAN Max 分解存储,管理工作负载域支持 vSAN ESA 延伸集群,通过 VCF Import 工具将现有环境中的 vSphere/vSAN 集群直接转换成管理域或者导
【VMware VCF】VCF 5.2:部署整合架构的SDDC。 【VMware VCF】VCF 5.2:部署整合架构的SDDC。 【VMware VCF】VCF 5.2:部署整合架构的SDDC。
Echarts 5 动态按需引入图表
官网提供的按需引入方法为全量按需引入,在打包分离中,仍旧存在使用不到的图表被打包进去。 例如:组件A使用了折线图、柱状图,组件B只用到了折线图,但是打包组件B的时候,柱状图也会被打包进去。 本文提供一种动态按需引入的思路,使得只用到折线图的组件B,打包的时候只打包折线图,不会将组件A用到的柱状图也打
Echarts 5 动态按需引入图表
12米空间分辨率DEM数据申请下载:TanDEM-X数据集
本文介绍全球12米与30米高空间分辨率的数字高程模型(DEM)数据——TanDEM-X数据的下载申请方法~
12米空间分辨率DEM数据申请下载:TanDEM-X数据集 12米空间分辨率DEM数据申请下载:TanDEM-X数据集 12米空间分辨率DEM数据申请下载:TanDEM-X数据集
poi的excel导出
poi的excel导出 这个导出依赖于模板文件,可便捷设置表头样式。 也可以不使用模板,直接创建。 1.引入poi依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;poi&lt;
poi的excel导出 poi的excel导出
使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验
前言 当前.NET环境下,生成WebApi代理类的工具已经有很多选择了,比如OpenApi Generator,NSwag和Refitter等,不同的工具生成的代码风格以及实现方式略有不同,比如Refitter生成的客户端是Refit风格. 本人比较喜欢Refit风格的标注风格因此还是比较喜欢使用R
使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验 使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验 使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验
使用Packer构建镜像
什么是Packer Packer 是一个强大的工具,它可以帮助我们轻松地构建各种类型的镜像,如虚拟机镜像、Docker 镜像等。 Packer 的工作原理是通过定义一个配置文件,该文件描述了要构建的镜像的特征和要求。然后 Packer 使用这个配置文件来执行一系列的步骤,例如安装必要的软件、配置系统
使用Packer构建镜像 使用Packer构建镜像 使用Packer构建镜像
目标追踪 ByteTrack 算法详细流程分析(看街拍追踪演示视频)
ByteTrack是字节跳动与2021年10月份公开的一个全新的多目标跟踪算法,原论文是《ByteTrack: Multi-Object Tracking by Associating Every Detection Box》。 ByteTrak的MOTA和FPS等指标上都实现了较好的性能,要优于现
目标追踪 ByteTrack 算法详细流程分析(看街拍追踪演示视频) 目标追踪 ByteTrack 算法详细流程分析(看街拍追踪演示视频) 目标追踪 ByteTrack 算法详细流程分析(看街拍追踪演示视频)