Leecode41 first-missing-positive

题目描述

给出一个无序的整数型数组,求不在给定数组里的最小的正整数
例如:
给出的数组为[1,2,0] 返回3,
给出的数组为[3,4,-1,1] 返回2.
你需要给出时间复杂度在O(n)之内并且空间复杂度为常数级的算法

分析

  • 将数组中所有负数和0,替换成MAX_VALUE
  • 一个n维数组,first-miss-positive 一定不大于 n+1
  • 遍历一遍数组,遍历过程中:
    • 数组下标为 i时 ,A[i] 如果不是MAX_VALUE,而且在数组下标范围内出现(如果大于数组的长度n,first-miss-positive也一定不是这个数)。将对应位置的A[A[i]-1],置为负数。表明A[i]出现于数组中。
    • 再次遍历数组的时候,如果某下标j出现 A[j] > 0,情况时,说明数字j+1没有出现过。

java 代码

public class Solution {
    public int firstMissingPositive(int[] A) {
        if(A == null || A.length == 0){return 1;}
        
        for(int i = 0; i < A.length; i++){
            if(A[i] <= 0){
                A[i] = Integer.MAX_VALUE;
            }
        }
        
        for(int i = 0; i< A.length; i++){
            int temp = Math.abs(A[i])-1;
            if(temp < A.length){                
                A[temp] = -Math.abs(A[temp]);                           
            }
        }
        for(int i = 0; i < A.length ; i++){
            if(A[i] > 0){
                return i+1;
            }
        }
        return A.length + 1;
        
        
        
        
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,695评论 0 2
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 11,525评论 1 42
  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 9,477评论 2 13
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,937评论 0 5
  • 最近看了一次得到APP的直播,主讲人是得到专栏《商业经典案例课》的作者——张潇雨。其中讲到世界上最大的玩具公司——...
    jianshucom阅读 4,652评论 0 1