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.


【题目分析】

给定一个整数数组,找出数组中第一个缺失的正整数。比如[1,2,0]缺少3,[3,4,-1,1]缺少2。


【思路】

1. 复杂度为O(n2)

在数组中分别查找1,2,3,···,nums.length,返回查找到的第一个不在数组中的值。最坏情况下需要nums.length次遍历数组,平均时间复杂度为O(n2)。

2. 复杂度为O(n)

如何更加简单得处理这个问题呢?在使用固定空间的约束下,我们当然是要在原来的数组上做文章。想法如下:

(1)遍历数组,如果当前元素nums[i]等于i+1,则表示第i+1个正数没有缺失,继续向后遍历;

(2)如果当前元素小于等于零或者大于nums.length,则继续向后遍历;

(3)如果当前元素大于零而且小于等于nums.length,则把nums[nums[i]-1]与nums[i]交换。

这样处理的结果就是我们把每一个正数n都放在了n-1的位置上,然后再从头遍历数组,如果某个位置k不满足nums[k] == k+1,则返回缺失的正数k+1,如果遍历到数组末尾,则返回nums.length+1;


【java代码】

 public class Solution {
public int firstMissingPositive(int[] nums) {
if(nums == null || nums.length == 0) return 1;
int i = 0; while(i < nums.length){
if(nums[i] == i+1) i++;
else if(nums[i] > 0 && nums[i] <= nums.length){
int temp = nums[nums[i] - 1];
if(temp != nums[i]){
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
else i++;
}
else i++;
} for(i = 0; i < nums.length; i++)
if(nums[i] != i+1) return i+1;
return nums.length+1;
}
}

LeetCode OJ 41. First Missing Positive的更多相关文章

  1. [Leetcode][Python]41: First Missing Positive

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 41: First Missing Positivehttps://oj.le ...

  2. LeetCode题解41.First Missing Positive

    41. First Missing Positive Given an unsorted integer array, find the first missing positive integer. ...

  3. 【一天一道LeetCode】#41. First Missing Positive

    一天一道LeetCode系列 (一)题目 Given an unsorted integer array, find the first missing positive integer. For e ...

  4. LeetCode OJ:First Missing Positive (第一个丢失的正数)

    在leetCode上做的第一个难度是hard的题,题目如下: Given an unsorted integer array, find the first missing positive inte ...

  5. leetcode problem 41 -- First Missing Positive

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  6. 【LeetCode】41. First Missing Positive (3 solutions)

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

  7. 【leetcode】41. First Missing Positive

    题目如下: 解题思路:这题看起来和[leetcode]448. Find All Numbers Disappeared in an Array很相似,但是有几点不同:一是本题的输入存在负数,二是没有 ...

  8. [array] leetcode - 41. First Missing Positive - Hard

    leetcode - 41. First Missing Positive - Hard descrition Given an unsorted integer array, find the fi ...

  9. LeetCode - 41. First Missing Positive

    41. First Missing Positive Problem's Link ---------------------------------------------------------- ...

随机推荐

  1. express mongoose 新手上路 问题记录

    1.npm start启动报错,提示端口占用 app.js中添加了app.listen(3000),删掉即可 2.跳转到html页面 //ejs改为html app.engine('.html', r ...

  2. NGINX----源码阅读---config配置脚本

    config文件为nginx的配置入口文件. 1. #!/bin/sh # Copyright (C) Igor Sysoev # Copyright (C) Nginx, Inc. LC_ALL=C ...

  3. Python初识与简介【开篇】

    目录 1.扯淡 2.Python历史 3.Python简介 4.Python应用 5.为什么是python而不是其他语言? 6.Python的种类 7.Python的特点 8.Python设计哲学 9 ...

  4. vue实例生命周期

    实例生命周期 var vm = new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 console.log('a i ...

  5. 一步步优化JVM一:概述、方法及需求

    现代JVM是一个具有灵活适应各种应用能力的软件,尽管很多应用能够在JVM的默认配置下运行良好,但是有些应用还是需要优化JVM配置以达到其性能要求.由于各种各样的应用能够运行在现在JVM上面,所以大量的 ...

  6. ASP.NET 企业组织机构代码验证

    /// <summary> /// 组织机构代码验证 /// </summary> /// <param name="arg"></par ...

  7. C#与C++中struct和class的小结

    在C#中,struct其实也是可以像class一样封装方法和数据的.请参考如下代码. using System; namespace testDiffInStructClass { public st ...

  8. ecshop 后台添加新的设置

    1.ecs_shop_config 表添加新的值. 2.language/zh_cn/admin/shop_config.php 设置字段后台字段名和提示信息($_LANG['cfg_name'][' ...

  9. qemu毒液漏洞分析(2015.9)

    0x00背景 安全娱乐圈媒体Freebuf对该漏洞的有关报道: 提供的POC没有触发崩溃,在MJ0011的博客给出了修改后可以使qemu崩溃的poc.详见: http://blogs.360.cn/b ...

  10. centos7下编译安装nginx1.10

    1.下载pcre 下载地址:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 解压到/usr/local/pcre8.3.9 2.下载ope ...