1. 题目
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.Your algorithm should run in O(n) time and uses constant space.
寻找第一个非负数,题目 label
为 array
2. 思路
两次遍历数组,第一次将数组的第 i
位存放数值 i + 1
,第二次检查第 i
位的元素,如果不是 i+1
则可以得到结果为 i+1
3. 实现
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int temp;
int curElmt;
int i = 0;
while ( i < nums.size()) {
curElmt = nums[i];
// 重复或不在范围内的元素则不交换
if (curElmt > 0 && curElmt <= nums.size() && curElmt != nums[curElmt - 1]) {
temp = nums[curElmt - 1];
nums[curElmt - 1] = nums[i];
nums[i] = temp;
}
else
i++;
}
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != (i + 1))
return i + 1;
}
return nums.size() + 1;
}
};
关于 Leetcode 的其他题目解答,可以参考我的 Github/leetcode-solutions