题意:找到数组中缺失的一个正数
思路:遍历数组,把数放到指定的index上,比如1放到index为0的位置,2放到index为1的位置
思想:利用数组index来解决问题
复杂度:时间O(n),空间O(1)
class Solution {
public int firstMissingPositive(int[] nums) {
int len = nums.length;
for(int i=0;i<len;i++) {
// 当前数<=0或就是所需的index或比数组长或所需的index已经放了正确的数时跳过
if(nums[i]<=0 || nums[i] == i+1 || nums[i] >= len || nums[nums[i] - 1] == nums[i])
continue;
else {
int temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
// 交换完的数需要在继续找到它的正确位置
i--;
}
}
for(int i=0;i<len;i++) {
if(nums[i] != i+1) {
return i+1;
}
}
return len+1;
}
}
网友评论