public class Solution {
public int firstMissingPositive(int[] A) {
for(int i=0; i< A.length; i++){
while(A[i] != (i+1)){
if(<A[i]<=0 || A[i]>A.length || A[A[i]-1] == A[i])
break;
swap(A,i,A[i]-1);
}
}
for(int i=0; i<A.length; i++){
if(A[i] != (i+1))
return i+1;
}
return A.length+1;
}
private void swap(int[]A, int l, int r){
int x = A[l];
A[l] = A[r];
A[r] = x;
}
}
分析:
大概思路是,先排序数组,在挑出第一个缺失的正数。假设一个正数都不缺,那么1就应该在第一个位置,2应该在第二个位置。
注意点是在排序数组的时候:当遇到负数,不排,因为排在哪里都不对;当遇到超过数组长度的是,不排,因为前面肯定有缺失的,答案肯定不是它;当遇到一个数字,它所在的位置上已经有了值相等的该数字,不排,因为不需要,多此一举。剩下的数字都把他们排放在应该呆着的位置。 第二次遍历的时候,查找A[I]!=i+1的值
本文介绍了一种通过排序算法优化并定位数组中缺失的最小正整数的方法。详细解释了算法的核心思路,包括如何跳过无效元素进行排序,并在排序后通过二次遍历查找缺失值。
145

被折叠的 条评论
为什么被折叠?



