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;
	}
};

猜你喜欢

转载自blog.csdn.net/kongqingxin12/article/details/84567971