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

    First Missing Positive

    问题:

    Given an unsorted integer array, find the first missing positive integer.

    思路:

      A[A[i]] == A[i] 的经典应用

    我的代码:

    public class Solution {
        public int firstMissingPositive(int[] nums) {
            if(nums==null || nums.length==0)    return 1;
            int len = nums.length;
            int i = 0;
            while(i < len)
            {
                if(nums[i] <= 0)
                {
                    i++;
                }
                else
                {
                    int index = nums[i];
                    if(index > len)
                    {
                        nums[i] = 0;
                        i++;   
                    }
                    else
                    {
                        if(nums[index-1] == index) i++;
                        else
                        {
                            int tmp = nums[index-1];
                            nums[index-1] = nums[i];
                            nums[i] = tmp;
                        }
                    }
                }
            }
            for(int k=0; k<len; k++)
            {
                if(nums[k] != k+1)    return k+1;
            }
            return len+1;
        }
        
    }
    View Code

    他人代码:

    // SOLUTION 2:
        public int firstMissingPositive(int[] A) {
            // bug 3: when length is 0, return 1;
            if (A == null) {
                return 0;
            }
            for (int i = 0; i < A.length; i++) {
                // 1: A[i] is in the range;
                // 2: A[i] > 0.
                // 3: The target is different;
                while (A[i] <= A.length && A[i] > 0 && A[A[i] - 1] != A[i]) {
                    swap(A, i, A[i] - 1);    
                }
            }
            
            for (int i = 0; i < A.length; i++) {
                if (A[i] != i + 1) {
                    return i + 1;
                }
            }
            
            return A.length + 1;
        }
    View Code

    学习之处:

    • 仔细体下面这一段代码,每一个A[i]都有一个使命,什么叫做使命完结了呢,经过跌宕起伏的过程A[i]的值发生了多次变化,但是A[A[i]] == A[i] 成功了,此时此刻使命完结了。
     while (A[i] <= A.length && A[i] > 0 && A[A[i] - 1] != A[i]) {
                    swap(A, i, A[i] - 1);    
                }
    View Code
    • 改变不好的习惯
  • 相关阅读:
    支付宝支付内容 尚未完成
    mvc 高并发解决方案之一---存储过程
    微信第三方平台开头篇--MVC代码(第三方获取ticket和公众号授权)
    卡券类字段
    Jquery 方法学习
    c# 对象反射赋值未知属性需类型转换
    C# enum 枚举 反射
    MVC c# 调用sql的存储过程
    Javascript装饰器原理
    关于阿里云的产品应用思考
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4460989.html
Copyright © 2011-2022 走看看