使陣列唯一的最小增量 數學思維的運用

2021-10-04 06:21:11 字數 678 閱讀 7831

0 <= a[i] < 40000

c++函式形式為      int

minincrementforunique

(vector<

int>

& a)

剛看到這個問題,肯定有點懵,因為假如有相同的就加1的話,加1之後還可能與其它的數相同,繼續加,依然有可能在哪個角落有乙個數就重複了,所以,這樣單純的掃瞄陣列,看起來可行型不大。

困擾我們的問題主要是什麼呢?

就是,你不知道加完之後,哪個數會和這個數相同,要是我們能把相同的找出來就好了。

於是,思路來了,排序!!!

排序後,如果a[i]==a[i-1],說明這裡重複了,那麼最簡單的辦法就是a[i]+1

如果a[i]為什麼我們要說最簡單的方法就是保持後乙個比前乙個大呢?

因為對於乙個陣列來說,全部不重複的理想條件就是後乙個剛好比前乙個大1,我們的目的就是創造這個理想條件。

注意:

class

solution

}return ans;}}

;

atfwus --writing by 2020–03–22

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 中...