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;
        }
    }
  • 相关阅读:
    java运算符优先级
    快排
    dpkg
    BZOJ 4487 染色问题
    BZOJ 3530 数数
    XSY 2754 求和
    BZOJ 4559 成绩比较
    广义容斥-二项式反演-容斥系数
    线性基学习笔记及其相关证明
    BZOJ 2754 喵星球上的点名
  • 原文地址:https://www.cnblogs.com/hwu2014/p/4479706.html
Copyright © 2011-2022 走看看