First Missing Positive

来源:互联网 发布:电子口岸数据分中心 编辑:程序博客网 时间:2024/05/17 13:08

1.题目

给出一个无序的正数数组,找出其中没有出现的最小正整数。

如果给出 [1,2,0], return 3
如果给出 [3,4,-1,1], return 2

2.算法

算法的基本思路是利用数组的index作为数组本身的索引,把正数按照递增顺序放在数组中,即让A[0]=1, A[1]=2, A[2]=3, ... , 这样一来,最后如果哪个数组元素违反了A[i]=i+1即说明i+1就是我们要求的第一个缺失的正数。对于那些不在范围内的数字,我们可以直接跳过,比如说负数,0,或者超过数组长度的正数,这些都不会是我们的答案。我们把不符合A[0]=1, A[1]=2, A[2]=3这样条件的一直变换,直到符合条件为止


public int firstMissingPositive(int[] a) {if (a == null || a.length == 0){return 1;}for (int i = 0; i < a.length; i++)  //从头往后扫描,不符合条件就交换{if (a[i] > 0 && a[i] <= a.length && a[a[i] - 1] != a[i]){int temp = a[a[i] - 1];  //不符合就交换a[a[i] - 1] = a[i];a[i] = temp;i--;}}for (int i = 0; i < a.length; i++){if (a[i] != i + 1){return i + 1;}}return a.length + 1;}


0 0
原创粉丝点击