• 41. First Missing Positive


    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.

    这个题是找到第一个缺失的正数,即找到1-n中缺失的正数,如果没有缺失则应该返回n+1

    窃以为这个题的关键在于搞清楚当给定包含n个数的数组时,最小缺失的数必然在1-(n+1)

    间产生,因为这个范围内的数才是潜在的最小缺失的正数。

    结题思路参考http://www.cnblogs.com/AnnieKim/archive/2013/04/21/3034631.html

    参考代码如下

    class Solution {
    public:
        int firstMissingPositive(int A[], int n) {
            int i = 0;
            while (i < n)
            {
                if (A[i] != (i+1) && A[i] >= 1 && A[i] <= n && A[A[i]-1] != A[i])
                    swap(A[i], A[A[i]-1]);
                else
                    i++;
            }
            for (i = 0; i < n; ++i)
                if (A[i] != (i+1))
                    return i+1;
            return n+1;
        }
    };

    我的代码如下:

    public class Solution {
        public int firstMissingPositive(int[] nums) {
             
             if(nums==null||nums.length==0)
                 return 1;
             for(int i = 0;i < nums.length; i++)
                 if(nums[i]!=(i+1)&&nums[i]>=1&&nums[i]<=nums.length&&nums[nums[i]-1]!=nums[i]){
                     int temp = nums[i];
                     nums[i] = nums[temp-1];
                     nums[temp-1] = temp;
                     i--;
                 }
             for(int i = 0;i < nums.length; i++)
                 if(nums[i]!=(i+1))
                     return i+1;
             return (nums.length+1);
        }
    }

    主要在于交换部分需要注意不要用nums[nums[i]-1]因为nums[i]的值会改变,而temp的值是不变的,所以用temp来替换nums[i],

  • 相关阅读:
    D
    hdu2376 Average distance (树形dp)
    hdu2376 Average distance (树形dp)
    选拔赛——旅游
    选拔赛——旅游
    cf 990c(思维+括号匹配)
    cf 990c(思维+括号匹配)
    Garland CodeForces
    Garland CodeForces
    Sherlock and his girlfriend CodeForces
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/6411457.html
Copyright © 2020-2023  润新知