Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >LeetCode 945. 使数组唯一的最小增量(贪心)

LeetCode 945. 使数组唯一的最小增量(贪心)

作者头像
Michael阿明
发布于 2020-07-13 07:48:44
发布于 2020-07-13 07:48:44
49100
代码可运行
举报
运行总次数:0
代码可运行

1. 题目

给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。

返回使 A 中的每个值都是唯一的最少操作次数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 1:
输入:[1,2,2]
输出:1
解释:经过一次 move 操作,数组将变为 [1, 2, 3]。

示例 2:
输入:[3,2,1,2,1,7]
输出:6
解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。
可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。

提示:
0 <= A.length <= 40000
0 <= A[i] < 40000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • map计数,遍历map,计数不为1的,将多余的加入下一个数里面
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int minIncrementForUnique(vector<int>& A) {
    	map<int,int> m;
    	int count = 0;
    	for(int& a : A)
    		m[a]++;
    	for(auto& mi : m)
    	{
    		if(mi.second > 1)
    		{
    			count += mi.second-1;
    			m[mi.first+1] += mi.second-1;
    		}
    	}
    	return count;
    }
};
  • 排序后,需要比前面的大1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int minIncrementForUnique(vector<int>& A) {
        int count = 0;
        sort(A.begin(), A.end());
        for(int i = 1; i < A.size(); ++i)
        {
            if(A[i] <= A[i-1])
            {
                count += A[i-1]-A[i]+1;
                A[i] = A[i-1]+1;
            }
        }
        return count;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 870. 优势洗牌(贪心 & 二分查找)
给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。
Michael阿明
2020/07/13
7390
LeetCode 870. 优势洗牌(贪心 & 二分查找)
LeetCode 996. 正方形数组的数目(回溯+剪枝)
给定一个非负整数数组 A,如果该数组每对相邻元素之和是一个完全平方数,则称这一数组为正方形数组。
Michael阿明
2021/02/19
2940
LeetCode 1647. 字符频次唯一的最小删除次数(贪心)
如果字符串 s 中 不存在 两个不同字符 频次 相同的情况,就称 s 是 优质字符串 。
Michael阿明
2021/02/19
6280
LeetCode 1005. K 次取反后最大化的数组和
给定一个整数数组 A,我们只能用以下方法修改该数组: 我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)
Michael阿明
2020/07/13
2760
LeetCode 1394. 找出数组中的幸运数(map计数)
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
Michael阿明
2020/07/13
6580
LeetCode 910. 最小差值 II(贪心)
给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。
Michael阿明
2020/07/13
8041
程序员面试金典 - 面试题 10.02. 变位词组(哈希map)
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。 变位词是指字母相同,但排列不同的字符串。
Michael阿明
2020/07/13
3570
LeetCode 976. 三角形的最大周长
给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
Michael阿明
2020/07/13
5860
LeetCode 1128. 等价多米诺骨牌对的数量(哈希)
如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。
Michael阿明
2020/07/13
4330
LeetCode 1128. 等价多米诺骨牌对的数量(哈希)
LeetCode 898. 子数组按位或操作(前缀和思想)
对于每个(连续的)子数组 B = [A[i], A[i+1], ..., A[j]] ( i <= j),我们对 B 中的每个元素进行按位或操作,获得结果 A[i] | A[i+1] | ... | A[j]。
Michael阿明
2021/02/19
4370
LeetCode 891. 子序列宽度之和(数学)
类似题目: LeetCode 907. 子数组的最小值之和(单调栈) 天池 在线编程 所有子数组之和(排列组合)
Michael阿明
2021/09/06
3640
LeetCode 823. 带因子的二叉树(动态规划)
文章目录 1. 题目 2. 解题 1. 题目 给出一个含有不重复整数元素的数组,每个整数均大于 1。 我们用这些整数来构建二叉树,每个整数可以使用任意次数。 其中:每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二叉树一共有多少个?返回的结果应模除 10 ** 9 + 7。 示例 1: 输入: A = [2, 4] 输出: 3 解释: 我们可以得到这些二叉树: [2], [4], [4, 2, 2] 示例 2: 输入: A = [2, 4, 5, 10] 输出: 7 解释: 我们可以得到这些
Michael阿明
2021/02/19
2790
LeetCode 923. 三数之和的多种可能(双指针)
给定一个整数数组 A,以及一个整数 target 作为目标值,返回满足 i < j < k 且 A[i] + A[j] + A[k] == target 的元组 i, j, k 的数量。
Michael阿明
2020/07/13
6390
剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2020/07/13
2800
LeetCode 1099. 小于 K 的两数之和(二分查找)
给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K 但尽可能地接近 K,返回这两个元素的和。
Michael阿明
2020/07/13
8460
LeetCode 692. 前K个高频单词(优先队列)
返回的答案应该按单词出现频率由高到低排序。 如果不同的单词有相同出现频率,按字母顺序排序。
Michael阿明
2020/07/13
5230
程序员面试金典 - 面试题 16.06. 最小差(排序+双指针)
给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差
Michael阿明
2020/07/13
2740
LeetCode 969. 煎饼排序
给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序。我们要执行零次或多次煎饼翻转(按顺序一次接一次地进行)以完成对数组 A 的排序。
Michael阿明
2021/02/20
5060
LeetCode 969. 煎饼排序
LeetCode 791. 自定义字符串排序(map)
S 已经根据某种规则进行了排序。我们要根据S中的字符顺序对T进行排序。更具体地说,如果S中x在y之前出现,那么返回的字符串中x也应出现在y之前。
Michael阿明
2020/07/13
4190
LeetCode 791. 自定义字符串排序(map)
LeetCode 941. 有效的山脉数组
给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。
Michael阿明
2020/07/13
2920
LeetCode 941. 有效的山脉数组
推荐阅读
相关推荐
LeetCode 870. 优势洗牌(贪心 & 二分查找)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验