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.
如果数组中的数是按照数该在的位置摆放(数i摆放在数组i的位置),那么很容易就能获得第一个缺失的正数。
所以我们先调整数组数的位置,令下标为i的位置存放数i。
再遍历一遍数组,如果nums[i]!=i,说明该位置的数缺失。
class Solution { public: int firstMissingPositive(vector<int>& nums) { int numsSize = nums.size(); if(numsSize==0 ){ return 1; } for(int i=0;i<numsSize;i++){ while(nums[i] != i){//如果下标i的位置存放的数不是i,则把nums[i]放在下标为nums[i]的位置 if(nums[i]>=numsSize || nums[i]<=0 || nums[i] == nums[nums[i]]){//如果是负数或者大于numsSize的数,则位置不变 break; } swap(nums[i],nums[nums[i]]); } } for(int i=1;i<numsSize;i++){ if(i!=nums[i]){ return i; } } return nums[0]==numsSize? numsSize+1 : numsSize; } };
时间: 2024-11-05 23:22:46