1 解题思想
其实很简单,把数组对应的值交换到第i位上,全部扫描完后,在扫一道,看第i个位置上的值,是否是i,不是的话就是这个是第一个不存在的
今天好累~~上了10.5小时的课,然后赶作业。。好累。。就不详细写了,有问题留言。。。
LeetCode #41 22岁最后一天写的。。嗯~~
2 原题
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.
3 AC解
public class Solution {
/**
* 利用通排序的思想就可以了
* */
public void swap(int[] nums,int i,int j){
int tmp=nums[i];
nums[i]=nums[j];
nums[j]=tmp;
}
public int firstMissingPositive(int[] nums) {
if(nums.length==0)
return 1;
for(int i=0;i<nums.length;i++){
if(nums[i]>0 && nums[i]<=nums.length && nums[nums[i]-1]!=nums[i]){
swap(nums,i,nums[i]-1);
i--;
}
}
//System.out.println();
for(int i=0;i<nums.length;i++){
//System.out.print(nums[i]+" ");
if(nums[i]!=i+1)
return i+1;
}
return nums.length+1;
}
}