个人记录-LeetCode 41. First Missing Positive

来源:互联网 发布:python 二维数组赋值 编辑:程序博客网 时间:2024/05/18 01:28

问题:
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.

代码示例:

这个问题最直观的方法是对数组进行重新排序,然后找到需要的数。

假设数组长度为n,那么第一个缺失的正数,其取值范围为1~n+1。
我们可以按照n[0] = 1, n[1] = 2…..这种方式重新排列数组,
然后找到n[i] != i+1的数,那么缺失的正数就是n+1。

public class Solution {    public int firstMissingPositive(int[] nums) {        for (int i = 0; i < nums.length; ) {            //对于小于0和大于n的数不用处理,只用确保0~n-1可以放置对应的1~n即可            //当nums[i]应该放置在nums[i]-1的位置,因此当不等时,就需要进行交换            //交换后,i并不增加,因为当前位置的新数也不一定满足要求            //尽管同一个位置可能需要交换多次,例如2,3,4,5,6,1,在1个位置将发生多次交换            //但平摊到每个数上,最多交换一次,因此还是O(n)的            if (nums[i] > 0 && nums[i] < nums.length + 1 && nums[i] != nums[nums[i] - 1]) {                swap(nums, i, nums[i] - 1);            } else {                ++i;            }        }        int i = 0;        //找到num[i] != i + 1的位置,i+1就是缺失的正数        for (; i < nums.length; ++i) {            if (nums[i] != i + 1) break;        }        return i + 1;    }    private static void swap(int[] nums, int fst, int sec) {        int temp = nums[fst];        nums[fst] = nums[sec];        nums[sec] = temp;    }}
0 0
原创粉丝点击