zoukankan      html  css  js  c++  java
  • 【leetcode】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.


    题解:开始想的是用一个hashmap保存数组中的每个值,然后遍历数组看看每个值-1和+1的值在不在map里面,后来发现只要用常数空间。就只能另想方法。

    其实我们可以用原来的数组作为hash表,使得A[i] = i+1,通过不停的交换做到这一点,那么最后A[i] != i+1的i+1就是missing的数;

    因为数组中除了missing的值,其他值都是连续的,所以数组中可能存放的最大值是n+1;

    以题目中的例子为例:

    最终A[1] != 1+1 = 2,所以缺失的2;

    代码如下:

     1 public class Solution {
     2     private void swap(int[] A,int a,int b){
     3         int temp = A[a];
     4         A[a] = A[b];
     5         A[b] = temp;
     6     }
     7     public int firstMissingPositive(int[] A) {
     8         //make A[i] = i+1
     9         for(int i = 0;i < A.length;i++){
    10             while(A[i] <= A.length && A[i] > 0 && A[i] != i+1 && A[i] != A[A[i]-1])
    11                 swap(A, i, A[i]-1);
    12         }
    13         
    14         //find the missing one
    15         for(int i = 0;i < A.length;i++)
    16             if(A[i] != i+1 )
    17                 return i+1;
    18         
    19         return A.length+1;
    20     }
    21 }
  • 相关阅读:
    界面和效果
    第一篇博客
    Java作业(六)
    Java学习(五)
    Java学习(四)
    JAVA学习(三)
    Java学习(二)
    Java学习心得
    音乐播放器项目计划进度安排
    课程设计 高云鹏 郑帅康 张程 姬泽辉
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3855337.html
Copyright © 2011-2022 走看看