zoukankan      html  css  js  c++  java
  • 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,1,3,10,11],返回的值为2。思路是对原来的数组进行重组,使得数组变为从1至n的情况。

    以[3,1,2]为例,如果nums[i] != nums[nums[i]-1],则swap相关的位置。

    nums[0] = 3, nums[nums[0]-1] = nums[1] = 1,所以swap变为[1,3,2]。 i依然是0,nums[0] = 0+1, 则i+1变为1,以此类推

    nums[1] = 3, nums[nums[1]-1] = nums[2] = 2,所以swap变为[1,2,3]。

    如果有重复,比如[1,3,1],

    nums[1] = 3, nums[nums[1]-1] = nums[2] = 1,所以swap变为[1,1,3]。

    nums[1] = 1, nums[nums[1]-1] = nums[0] = 1,重复的话直接i加1,变为2。

     public int FirstMissingPositive(int[] nums) {
           int i =0;
           while(i< nums.Count())
           {
               if(nums[i]==i+1|| nums[i]<=0 || nums[i]> nums.Count() ) i++;
               else if(nums[i] != nums[nums[i]-1]) Swap(nums,i,nums[i]-1);
               else i++;
           }
           
           int j=0;
           while(j< nums.Count())
           {
               if(nums[j] == j+1) j++;
               else return j+1;
           }
           return j+1;
        }
        private void Swap(int[] nums,int i,int j )
        {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
  • 相关阅读:
    简单makeFile编写
    安装vim、简单linux指令
    XXX 不在sudoers文件中 解决方法
    MYSQL 5.7的那些坑
    testlink的那些坑
    MySQL 增删改查基础
    mysql操作之- 忘记root账户密码
    Python第三方库安装
    写在前面
    一、jenkins的使用 之 新建项目
  • 原文地址:https://www.cnblogs.com/renyualbert/p/5899250.html
Copyright © 2011-2022 走看看