LeetCode每日一题(25)——最少移动次数使数组元素相等 II

2023-05-16

最少移动次数使数组元素相等 II

  • 1.题目
  • 2.示例
  • 3.思路
  • 4.代码

1.题目

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

2.示例

示例 1:

输入:nums = [1,2,3]
输出:2
解释: 只需要两步操作(每步操作指南使一个元素加 1 或减 1): [1,2,3] => [2,2,3] => [2,2,2]

示例 2:

输入:nums = [1,10,2,9]
输出:16

提示:

n == nums.length
1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9

3.思路

一开始我以为都变成平均数变化的次数最少,后来发现不对,变成中位数才能使变化的次数最少。只要知道是向中位数变化就没什么难的了。排序的时候寻找中位数需要用到排序,我用的是官方的大顶堆排序代码,期末考试提前不想复习这个排序了。对于大顶堆排序可以看这个题解的图示
力扣大顶堆排序寻找第k大的数

4.代码

func minMoves2(nums []int) int {
	addr := len(nums)/2+1
	//数组中的第addr个最大数,中位数
	mid := findKthLargest(nums,addr)
	
	ans := 0
	//遍历数组,得到每个数变成中位数需要的次数
	for _,v := range nums{
		if v>mid {
			ans = ans + v - mid
 		}else {
			 ans = ans + mid -v
		}
	}
	return ans
}

//大顶堆法寻找数组中第k大的数
func findKthLargest(nums []int, k int) int {
	heapSize := len(nums)
	buildMaxHeap(nums, heapSize)
	for i := len(nums) - 1; i >= len(nums) - k + 1; i-- {
		nums[0], nums[i] = nums[i], nums[0]
		heapSize--
		maxHeapify(nums, 0, heapSize)
	}
	return nums[0]
}
func buildMaxHeap(a []int, heapSize int) {
	for i := heapSize/2; i >= 0; i-- {
		maxHeapify(a, i, heapSize)
	}
}
func maxHeapify(a []int, i, heapSize int) {
	l, r, largest := i * 2 + 1, i * 2 + 2, i
	if l < heapSize && a[l] > a[largest] {
		largest = l
	}
	if r < heapSize && a[r] > a[largest] {
		largest = r
	}
	if largest != i {
		a[i], a[largest] = a[largest], a[i]
		maxHeapify(a, largest, heapSize)
	}
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode每日一题(25)——最少移动次数使数组元素相等 II 的相关文章

  • VNC树莓派无法连接

    问题 xff1a 树莓派配置好VNC后 xff0c 第二次通过笔记本远程连接失败 xff0c 报错refused by the computer 解决方法 xff1a 在putty中输入IP地址登录树莓派 xff0c 输入vncserver
  • 经典LCA例题:P4180 [BJWC2010] 严格次小生成树

    Acwing xff1a 严格次小生成树 xff08 求两点间路径上最大边的权值 xff09 模板 洛谷 xff1a 严格次小生成树 求两点间路径上最大边的权值 xff0c 就不能通过前缀和了 xff0c 会丢失信息 每个结点存到其他结点的

随机推荐

  • linux下的压缩与解压缩

    由于计算机中的数据有些需要备份从而归档一个大文件中 下面介绍一下常用的linux压缩解压缩命令 1 关于tar的命令 参数解析 xff1a c 创建生成打包的文件 v 列出打包和解包的详细过程 xff0c 显示进度 f 指定文档的名称 xf
  • 关于fixed frame【odom】does not exist的问题

    在执行完roslaunch mbot description arbotix mbot with camera xacro launch后 xff0c 终端末端是否出现以下一段红色字体 xff0c 若有 xff0c 则此篇文章对你或许有用
  • Linux安装配置Tomcat

    1 下载Tomcat服务器 链接 xff1a https pan baidu com s 15wEXVJWdUUuXX1xRnXylUQ 提取码 xff1a 1234 官网下载 xff1a Apache Tomcat Apache Tomc
  • Oracle类型number与PG类型numeric对比和转换策略

    Oracle 11g number 任意精度数字类型 http docs oracle com cd B28359 01 server 111 b28318 datatype htm CNCPT313 存储数据的范围 正数 xff1a 1
  • 强制关闭linux进程

    问题 xff1a 卡住 xff0c 鼠标可以移动但点击无反应 xff0c 键盘可用 方法 xff1a xff08 1 xff09 Ctrl 43 Alt 43 T 打开终端 xff0c 输入top xff0c 显示的全是现在系统的进程 xf
  • 【计算机系统遇到的问题】win11权限开启方法——相机、麦克风等权限——“其中一些设置由你组织管理”

    win11更新后 xff0c 想必大家应该会出现跟我一样的问题 无法开启权限 xff0c 不知道在哪开启权限 我是在下午跟我老爸视频电话的时候发现这个问题的 xff0c 点击开摄像头 xff0c 但是我这边跟老爸那边却没有我的画面 xff0
  • gitlab安装部署

    本教程使用centos7 6 首先安装依赖包 yum install y curl policycoreutils python openssh server 如下提示相关依赖安装完成 安装步骤如下 xff1a 1 使用官方脚本添加yum源
  • 用51单片机中断控制LED灯亮灭

    用51单片机中断控制LED灯亮灭 span class token macro property span class token directive keyword include span span class token string
  • HDFS

    xff08 一 xff09 HDFS简介及其基本概念 HDFS xff08 Hadoop Distributed File System xff09 是hadoop生态系统的一个重要组成部分 xff0c 是hadoop中的的存储组件 xff
  • 如何在服务器用docker搭建Redis集群

    用docker部署Redis集群 这里用的是分片 43 高可用 43 负载均衡 xff0c 三主三从 第一步创建网卡 span class token comment 创建网卡 span span class token function
  • P1825 [USACO11OPEN]Corn Maze S——bfs

    USACO11OPEN Corn Maze S 题面翻译 奶牛们去一个 N M N times M N M 玉米迷宫 xff0c 2
  • 7-57 租用游艇问题——dp

    长江游艇俱乐部在长江上设置了n个游艇出租站1 xff0c 2 xff0c xff0c n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站i到游艇出租站j之间的租金为r i j 1 lt 61 i
  • 三种接口实现增删改查

    目录 ArrayListHashSetHashMap ArrayList ArrayList 实现增删改查 span class token keyword package span span class token namespace t
  • 旗帜软件工作室2021年年度交接会议总结

    只有时间的消逝 xff0c 才使我们注意到时间 在小组的一年时间过的飞快 xff0c 在这一年里我们的心智品性和专业能力都经历了充分了磨练 和一年前的我们相比 xff0c 如今的我们更加成熟稳重 xff0c 不再心浮气躁 xff1b 在自己
  • nested exception is org.springframework.beans.factory.BeanCreationException: 不能注入对象 创建对象失败 spring...

    出现错误的背景 在使用Spring 43 SpringMVC 43 Mybatis SSM集成框架时 xff0c 服务器启动就会报错 错误根源 XML配置错误 解决方案 第一步 查找springmvc xml 配置文件中 是否添加了扫描注解
  • 算法练习——(2)逢7过

    1 中国朋友们聚会时喜欢玩 34 逢7过 34 的游戏 xff0c 老外有个同样的游戏 xff0c FlipFlop xff0c 它从1计数到100 xff0c 顺序输出 当遇到3的倍数就要说 Flip xff0c 遇到5的倍数就要说 Fl
  • beego的安装和简单使用

    beego的安装和使用 beego安装升级 beebee工具的安装 使用beebee newbee apibee runbee packbee version beego beego 是免费 开源的软件 xff0c beego 源代码目前托
  • 网络爬虫——GO

    这里写目录标题 go colly网络爬虫框架goquery HTML解析goquery主要的结构怎么使用goquery常用选择器 go colly网络爬虫框架 go colly是用Go实现的网络爬虫框架 go colly快速优雅 xff0c
  • LeetCode每日一题(12)——按奇偶排序数组(双指针)

    按奇偶排序数组 1 题目2 示例3 思路4 代码 1 题目 给你一个整数数组 nums xff0c 将 nums 中的的所有偶数元素移动到数组的前面 xff0c 后跟所有奇数元素 返回满足此条件的 任一数组 作为答案 2 示例 示例 1 x
  • LeetCode每日一题(25)——最少移动次数使数组元素相等 II

    最少移动次数使数组元素相等 II 1 题目2 示例3 思路4 代码 1 题目 给定整数数组 nums 和整数 k xff0c 请返回数组中第 k 个最大的元素 请注意 xff0c 你需要找的是数组排序后的第 k 个最大的元素 xff0c 而