? ? ? ? 那天面试,考了一道困难题,当时脑袋嗡嗡的,没想出来,后来回去看了,其实思路不难,冷静想想应该可以做出来的,可惜有点紧张了。估计面试也亮了
? ? ? ? 这道题是LeetCode的第41道题,缺失的第一个整数。
? ? ? ? 题目描述:给你一个未排序的整数数组,请你找出其中没有出现的最小正整数。要求时间复杂度O(n),空间复杂度O(1)
????????
class Solution {
public int firstMissingPositive(int[] nums) {
int n=nums.length;
for(int i=0;i<n;i++){
while(nums[i]>0&&nums[nums[i]-1&&nums[i]!=nums[nums[i]-1]){
int temp=nums[nums[i]-1];//把nums对应的值放在对应的序号上,数字1要放到下标0上
nums[nums[i]-1]=nums[i];//所以为nums[nums[i]-1]
//使用while而不用if,是因为换过来的数字也需要换到对应的位置上去
nums[i]=temp;//
}
}
for(int i=0;i<n;i++){
if(nums[i]!=i+1)return i+1;//判断这个序号对应的是不是这个数,如果不是则返回这个数
}
return n+1;//如果前面的数和下标一一符合,那么返回n+1
}
}
|