945. 使陣列唯一的最小增量
阿新 • • 發佈:2018-12-03
剛開始是用一層for迴圈,判斷num[i]是否唯一,不出意料,肯定超時;
class Solution { public: int minIncrementForUnique(vector<int>& A) { map<int,int> judge; int ans = 0; vector<int>num = A; sort(num.begin(), num.end()); //int begin = num.front(); for (int i = 0; i < num.size(); i++) { if (judge[num[i]] == 0) judge[num[i]]++; else { while (judge[num[i]]!=0) { num[i]++; ans++; } judge[num[i]]++; } } return ans; } };
最後我的解法就是先建立一個map型別的容器,統計好數組裡所有相同數字的位置,然後用一個while迴圈,不斷消去count的頂,指導count的size為0
class Solution { public: int minIncrementForUnique(vector<int>& A) { map<int,vector<int>>count; int ans = 0; vector<int>num = A; sort(num.begin(), num.end()); //int begin = num.front(); for (int i = 0; i < num.size(); i++) { count[num[i]].push_back(i); } while (!count.empty()) { pair<int, vector<int>> te = *count.begin(); if (te.second.size() != 1) { int te_num = te.first + 1; for (int j = 1; j < te.second.size(); j++) { count[te_num].push_back(te.second[j]); ans += te_num - te.first; te_num++; } } count.erase(count.begin()); } return ans; } };