1. 程式人生 > >945. 使陣列唯一的最小增量

945. 使陣列唯一的最小增量

945. 使陣列唯一的最小增量

剛開始是用一層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;
	}
};