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.

    【analyze】

    1.由于是无序的,所以处理起来有点麻烦。可以考虑将正确的正数放在正确的索引位置上,然后再遍历整个数组

    2.有两个地方一直没注意到:一.当前位置交换后,还需要判断;二.若解决第一个问题后(加入while),当前值与交换的值相同时会进入死循环

    【算法】

    v1:比较无耻的做法,先排序
    public class Solution {
        public int firstMissingPositive(int[] nums) {
            Arrays.sort(nums);
            int flag=1;
            int i=0;
            while(i<nums.length) {
                if(nums[i]>0) {
                    if(nums[i]==flag) {
                        flag++;
                        i++;
                        while(i<nums.length&&nums[i]==nums[i-1])
                            i++;
                    }else
                        return flag;
                }else 
                    i++;
            }
            return flag;
        }
    }
    
    v2:
    public class Solution {
        public int firstMissingPositive(int[] nums) {
            if(nums==null||nums.length<1)
                return 1;
            int len=nums.length;
            for(int i=0;i<nums.length;i++) {
                while(nums[i]!=i+1&&nums[i]>0&&nums[i]<=len) {
                    if(nums[i]==nums[nums[i]-1])
                        break;
                    int temp=nums[i];
                    nums[i]=nums[temp-1];
                    nums[temp-1]=temp;
                }
            }
            for(int i=0;i<len;i++) {
                if(nums[i]!=i+1)
                    return i+1;
            }
            return len+1;
        }
    }
  • 相关阅读:
    杭州电acm理工大舞台版
    String.Split()功能
    android layout物业介绍
    讨厌OpenSSL
    Android Bundle类别
    多项式回归
    如何直接串行电缆以及空调制解调器串行电缆之间的区别?
    为什么写科技博客是情侣如此重要?
    SSH框架总结(帧分析+环境结构+示例源代码下载)
    RapidXml用法
  • 原文地址:https://www.cnblogs.com/hwu2014/p/4479706.html
Copyright © 2011-2022 走看看