leetcode 41. 缺失的第一个正数 hard
题目描述:
解题思路:
爷就是神,hard题大概几分钟就想到了解法。。其实跟剑指 Offer 03. 数组中重复的数字 的思路是一样的。确实有点哈希的感觉,或许真可以叫原地哈希?
代码:
//
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size();
int i = 0;
while (i<n) {
// nums[i] != nums[nums[i] -1] 是为了防止无限循环
while (nums[i] > 0 && nums[i] <= n && nums[i] != i+1 && nums[i] != nums[nums[i] -1]) {
swap(nums[i], nums[nums[i] - 1]);
}
i++;
}
for (int i = 0; i < n; i++){
if (nums[i] != i+1)
return i+1;
}
return n+1;
}
};