示例 1:
输入: [1,2,0]输出: 3示例 2:
输入: [3,4,-1,1]输出: 2示例 3:
输入: [7,8,9,11,12]输出: 1说明:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。
算法:我们仅考虑大于0小于等于nums,size()的数,将它们放到各自的位置(如nums[i]放到i+1...)。最后第一次出现nums[i]!=i+1的位置就是我们要找的那个数。
class Solution {
public:
int firstMissingPositive(vector<
int>&
nums) {
int n=
nums.size();
for(
int i=
0;i<n;i++
){
while(nums[i]>
0&&nums[i]<=n&&nums[nums[i]-
1]!=
nums[i])
swap(nums[nums[i]-
1],nums[i]);
}
int i=
0;
for(i=
0;i<n;i++
)
if(nums[i]!=i+
1)
return i+
1;
return i+
1;
}
};
转载于:https://www.cnblogs.com/programyang/p/11179147.html