zoukankan      html  css  js  c++  java
  • 41. First Missing Positive

    题目链接

    题目大意:给出一个数组,从1开始找出数组中缺失的第一个正数。例子如下:

    法一:利用HashSet。将数组中的数都存入set集合中,然后从1开始遍历set集合,一旦不存在则返回。代码如下(耗时7ms):

     1     public int firstMissingPositive(int[] nums) {
     2         if(nums.length == 0) {
     3             return 1;
     4         }
     5         //存入set集合
     6         HashSet<Integer> set = new HashSet<Integer>();
     7         for(int i = 0; i < nums.length; i++) {
     8             set.add(nums[i]);
     9         }
    10         //从1开始遍历set集合
    11         int cnt = 1;
    12         while(true) {
    13             if(set.contains(cnt)) {
    14                 cnt++;
    15             }
    16             else {
    17                 return cnt;
    18             }
    19         }
    20     }
    View Code

    法二:常数空间。具体见。代码如下(耗时7ms):

     1     public int firstMissingPositive(int[] nums) {
     2         int i = 0;
     3         while(i < nums.length) {
     4             //把nums[i]放入i+1
     5             //其中nums[i]负数、nums[i]超过nums的总个数,nums[i]已经是i+1,这三种情况下,不需要进行替换
     6             if(nums[i] > 0 && nums[i] != i + 1 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]) {
     7                 int tmp = nums[nums[i] - 1];
     8                 nums[nums[i] - 1] = nums[i];
     9                 nums[i] = tmp;
    10             }
    11             else {
    12                 i++;
    13             }
    14         }
    15         //最后得到的数组一定是在满足条件的情况下的下标中,nums[i]=i+1,遍历即可
    16         //比如{0,2,2,1,1}最后得到的数组一定是{1,2,2,0,1}
    17         for(int j = 0; j < nums.length; j++) {
    18             if(nums[j] != j + 1) {
    19                 return j + 1;
    20             }
    21         }
    22         return nums.length + 1;
    23     }
    View Code
  • 相关阅读:
    C# 窗体WinForm中动态显示radioButton实例
    C#和Java交互相关研究
    c# 注册表操作,创建,删除,修改,判断节点是否存在
    C#单例模式的三种写法
    C#中使用TCP通信
    c#中this的用法
    C#单例模式的三种写法
    二十道经典C#面试题
    Linux chattr 命令详解
    Linux ulimit命令详解
  • 原文地址:https://www.cnblogs.com/cing/p/9340458.html
Copyright © 2011-2022 走看看