
3种解法 - 得到使数组唯一的最小增量
排序数组:首先对数组进行排序。 初始化变量:设置一个变量 遍历数组:逐个处理排序后的数组中的每个元素。 累计操作次数:将每次移动的次数累加,得到总操作次数。
发布日期:2021-05-08 16:54:51
浏览次数:20
分类:精选文章
本文共 1038 字,大约阅读时间需要 3 分钟。
为了使给定的整数数组中的每个值唯一,最少需要进行多少次操作?每次操作可以选择任意一个元素,将其递增1。
方法思路
为了解决这个问题,我们可以使用贪心算法。具体步骤如下:
preMax
用于记录当前处理到达的最大值,初始值为1。- 如果当前元素大于
preMax
,说明它需要移动到当前的位置,计算移动次数并更新preMax
。 - 如果当前元素小于或等于
preMax
,说明它需要移动到preMax
的位置,计算移动次数并更新preMax
。
这种方法的时间复杂度是 O(n log n),主要是由于排序操作带来的。空间复杂度是 O(1),因为我们只使用了额外的变量。
解决代码
class Solution: def minIncrementForUnique(self, A: List[int]) -> int: if not A: return 0 A.sort() preMax = 1 count = 0 for num in A: if num > preMax: count += num - preMax preMax = num + 1 else: count += preMax - num preMax = num + 1 return count
代码解释
- 排序数组:使用
A.sort()
对数组进行排序。 - 初始化变量:
preMax
初始化为1,表示当前处理到的最大值。 - 遍历数组:对于每个元素
num
,检查它是否大于preMax
。- 如果
num
大于preMax
,说明它需要移动到当前位置,计算移动次数并更新preMax
。 - 如果
num
小于或等于preMax
,说明它需要移动到preMax
的位置,计算移动次数并更新preMax
。
- 如果
- 累计操作次数:将每次移动的次数累加到
count
中,最后返回总操作次数。
通过这种方法,我们可以高效地找到使数组中的每个值唯一的最少操作次数。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月28日 18时26分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux学习总结(12)——Linux必须学会的60个命令
2023-02-03
Linux学习总结(13)——在阿里云的ubuntu上部署个人服务
2023-02-03
Linux学习总结(14)——Linux权限控制
2023-02-03
Linux学习总结(15)——提高 Vim 和 Shell 效率的 9 个建议
2023-02-03
Linux学习总结(17)——Linux新手必须学会的12个命令
2023-02-03
Linux学习总结(18)——Linux使用init命令关机、重启、切换模式
2023-02-03
Linux学习总结(19)——Linux中文本编辑器vim特殊使用方法
2023-02-03
Linux学习总结(1)——Linux命令大全完整版
2023-02-03
Linux学习总结(20)——Linux 文件夹结构和作用
2023-02-03
Linux学习总结(21)——CentOS7环境下FTP服务器的安装和配置
2023-02-03
Linux学习总结(22)——CentOS7.2安装Nginx
2023-02-03
Linux学习总结(24)——Linux查找文件命令
2023-02-03
Linux学习总结(25)——CentOS系统常识
2023-02-03
Linux学习总结(26)——Shell常用命令总结
2023-02-03
Linux学习总结(27)——CentOS7及以上系统的systemctl命令使用介绍
2023-02-03
Linux学习总结(27)——CentOS7及以上系统的systemctl命令使用介绍
2023-02-03
Linux学习总结(28)——Linux主机加固
2023-02-03
Linux学习总结(28)——Linux主机加固
2023-02-03
Linux学习总结(28)——Linux主机加固
2023-02-03