給定陣列使唯一的最小增量

2021-10-04 06:19:07 字數 896 閱讀 1384

#1 描述  

945 給定整數陣列 a,每次 move 操作將會選擇任意 a[i],並將其遞增 1。

返回使 a 中的每個值都是唯一的最少操作次數。

示例 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 操作是不能讓陣列的每個值唯一的。

#2、思路

移動乙個元素使唯一,任意移動,可以等價為代替移動

#3、notes

1、while迴圈乙個乙個加1,會時間超限,所以直接記錄需要累加的次數

2、後乙個比前乙個大需要的次數是   a[i-1] - a[i] +1; 和0的最大值

#4、複雜度:

空間:o(1)

#5、code

class solution {

public:

int minincrementforunique(vector& a) {

sort(a.begin(),a.end());

int sum=0;

for(int i=1;i// while(a[i]<=a[i-1])

//    a[i]++;

//    sum++;

int differ=a[i-1]-a[i]+1;  //直接求出來需要加的次數,而不是上面乙個乙個的加,

//上面時間超限了

a[i]+=max(0,differ);

sum+=max(0,differ);

return sum;

945 使陣列唯一的最小增量

給定整數陣列 a,每次 move 操作將會選擇任意 a i 並將其遞增 1。返回使 a 中的每個值都是唯一的最少操作次數。示例 1 輸入 1,2,2 輸出 1 解釋 經過一次 move 操作,陣列將變為 1,2,3 示例 2 輸入 3,2,1,2,1,7 輸出 6 解釋 經過 6 次 move 操作...

945 使陣列唯一的最小增量

題目描述 解題思路 1 先排序再遍歷 先對陣列進行排序,自帶的排序就可以的。最小的元素肯定是不需要增量的,然後遍歷陣列比較大小,如果後乙個數字與前乙個相等,就把後面那個數字加一。這樣加一後會造成就是已經排好序的陣列,但是後面元素比前乙個小,所以判斷條件的時候要增加 如果a i a i 1 那麼後乙個...

945 使陣列唯一的最小增量

計數 class solution else if taken 0 count x 0 return ans 線性探測法 路徑壓縮o n class solution return move 線性探測定址 含路徑壓縮 private intfindpos int a 否則向後定址 因為pos a 中...