博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】945. Minimum Increment to Make Array Unique
阅读量:6574 次
发布时间:2019-06-24

本文共 1294 字,大约阅读时间需要 4 分钟。

题目如下:

Given an array of integers A, a move consists of choosing any A[i], and incrementing it by 1.

Return the least number of moves to make every value in A unique.

 

Example 1:

Input: [1,2,2]Output: 1Explanation:  After 1 move, the array could be [1, 2, 3].

Example 2:

Input: [3,2,1,2,1,7]Output: 6Explanation:  After 6 moves, the array could be [3, 4, 1, 2, 5, 7].It can be shown with 5 or less moves that it is impossible for the array to have all unique values. 

Note:

  1. 0 <= A.length <= 40000
  2. 0 <= A[i] < 40000

解题思路:本题的解法类似贪心算法。首先找出所有重复的值并且按升序排好,对于每个重复的值,都找出最小的并且大于自身以及当前不与其他值重复的值,两者的差值即为move的步数。

代码如下:

class Solution(object):    def minIncrementForUnique(self, A):        """        :type A: List[int]        :rtype: int        """        dic = {}        dup = []        for i in A:            if i in dic:                dup.append(i)            else:                dic[i] = 1        dup.sort()        res = 0        current = 0        for i in dup:            current = max(i+1,current)            while True:                if current in dic:                    current += 1                    continue                dic[current] = 1                res += (current - i)                current += 1                break        return res

 

转载于:https://www.cnblogs.com/seyjs/p/10016970.html

你可能感兴趣的文章
JavaScript 特殊效果代码
查看>>
【?】codeforces721E Road to Home(DP+单调队列)
查看>>
MySQL 仅保留7天、一个月数据
查看>>
OGG 11g Checkpoint 详解
查看>>
PHP中使用socket通信响应速度慢的原因与解决办法
查看>>
Win7下安装Mysql(解压缩版)
查看>>
UVA 11992 Fast Matrix Operations (降维)
查看>>
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
查看>>
暂时不想读研的几点理由
查看>>
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
大整数加法
查看>>
下拉菜单
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>
0029-求最小的数
查看>>
【MVC+EasyUI实例】对数据网格的增删改查(上)
查看>>
第三章:如何建模服务
查看>>