1. 程式人生 > >Leetcode 041 First Missing Positive(桶排序)

Leetcode 041 First Missing Positive(桶排序)

解題思路:桶排序的變種,每次把碰到把nums[i] 和 nums[nums[i]] 互換,保證 nums[i] = nums[nums[i]]。當然nums[i]小於零,或者是大於陣列的可以忽略。最後遍歷一遍陣列,第一個不匹配的位置即為答案。

class Solution {
	public:
		int firstMissingPositive(vector<int>& nums) {
			nums.push_back(0);
			int n = nums.size();

			for (int i = 0; i < n; i++) {
				while (nums[i] >= 0 && nums[i] < n) {
					if (nums[i] == i || nums[i] == nums[nums[i]]) break;

					int tmp = nums[i];
					nums[i] = nums[tmp];
					nums[tmp] = tmp;
				}
			}
			int ans = 1;
			while (ans < n && nums[ans] == ans) ans++;
			return ans;
		}
};