题解 | #缺失的第一个正整数,时间O(n),空间O(1)#
缺失的第一个正整数
http://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int minNumberDisappeared (int[] nums) {
if (nums == null || nums.length == 1) return 1 ;
//缺失的最小数一定在[1-len]
int len = nums.length ;
//对于nums[i],若其在[1-len]之间,则将其放入正确位置,即i-1处;若不在[1-len]则不管,i++
for(int i = 0 ; i < len ; i ++) {
//若nums[i]在[1-len]之间,则将其放入正确位置(交换),交换后,
//新的nums[i]再继续此操作,直到nums[i]不在[1-len]或者
//nums[i]和其即将交换的位置的元素nums[nums[i]-1]相等
while(nums[i] >= 1 && nums[i] <= len && nums[i] != i+1 && nums[i] != nums[nums[i]-1]) {
swap(nums, i , nums[i]-1) ;
}
}
//遍历,如果位置i的元素不是i+1,说明此位置缺失i+1
for(int i = 0 ; i < len ; i ++) {
if(nums[i] != i+1) return i + 1 ;
}
//如果都在正确的位置,(即[1-len]都出现了),那么直接返回len+1
return len + 1 ;
}
public void swap(int[] arr , int i , int j) {
int t = arr[i] ;
arr[i] = arr[j] ;
arr[j] = t ;
}
}
一个菜鸟的算法刷题记录 文章被收录于专栏
分享一个菜鸟的成长记录
