41-First Missing Positive

标签: 算法 数据结构 leetcode
10人阅读 评论(0) 收藏 举报
分类:

Description
Given an unsorted integer array, find the smallest missing positive integer.


Example 1:

Input: [1,2,0]
Output: 3

Example 2:

Input: [3,4,-1,1]
Output: 2

Example 3:

Input: [7,8,9,11,12]
Output: 1

Note:
Your algorithm should run in O(n) time and uses constant extra space.


问题描述
给定一个未排序的整数数组,返回最小的缺失正整数


问题分析

若是排好序的正整数数组,为[1, 2, 3, 4, 5…],即i = n - 1(i为下标,n为元素值)

那么我们通过将”错位”的元素通过swap转换到它对应的位置,然后扫描数组就可以了

看一个例子,[1, 2, 0]

1已就位,2已就位,0跳过

从左到右扫描数组,发现只有下标为2处未就位,返回2 + 1,即3


解法

class Solution {
    public int firstMissingPositive(int[] nums) {
        int len = nums.length, i = 0;
        /*
        第一个if的三种情况分别为
        nums[i] <= 0, 非正数
        nums[i] == i + 1, 已就位
        nums[i] > len,元素值太大,无法找到合适的位置就位
        第二个表示元素值未就位,通过swap进行替换,归位
        第三个表示有重复元素,跳过即可
        */
        while(i < len){
            if(nums[i] <= 0 || nums[i] == i + 1 || nums[i] > len)   i++;
            else if(nums[nums[i] - 1] != nums[i])   swap(nums, i, nums[i] - 1);
            else    i++;
        }

        i = 0;
        while(i < len && nums[i] == i + 1)  i++;

        return i + 1;
    }
    public void swap(int[] nums, int a, int b){
        int temp =  nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    }
}
查看评论

First Missing Positive -- LeetCode

原题链接: http://oj.leetcode.com/problems/first-missing-positive/  这道题要求用线性时间和常量空间,思想借鉴到了Counting sort中的...
  • linhuanmars
  • linhuanmars
  • 2014-03-13 04:31:27
  • 12231

【LeetCode】First Missing Positive 解题报告

【题目】 Given an unsorted integer array, find the first missing positive integer. For example, Given...
  • ljiabin
  • ljiabin
  • 2014-12-28 21:00:14
  • 4539

Leetcode:First Missing Positive

Given an unsorted integer array, find the first missing positive integer. For example, Given [1,...
  • nanjunxiao
  • nanjunxiao
  • 2013-10-23 16:27:01
  • 10685

41. First Missing Positive Leetcode Python

Given an unsorted integer array, find the first missing positive integer. For example, Given [...
  • hyperbolechi
  • hyperbolechi
  • 2015-02-03 04:40:20
  • 903

leetcode笔记:First Missing Positive

该题的大意是给定一个未排序的数组,该数组可能包含零或正负数,要求找出第一个未出现的正数。...
  • liyuefeilong
  • liyuefeilong
  • 2015-12-24 01:45:52
  • 2163

LeetCode(41) First Missing Positive

题目如下: A peak element is an element that is greater than its neighbors. Given an input array where nu...
  • feliciafay
  • feliciafay
  • 2014-12-31 08:08:19
  • 2166

[LeetCode41] First Missing Positive

Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0...
  • sbitswc
  • sbitswc
  • 2014-06-17 23:51:25
  • 2578

Leetcode First Missing Positive 三个思路

这条题目虽然简单,但是思路还是很多的,可以开拓一下思路。 下面三种思路都是O(n)时间复杂度,测试运行时间基本上都没区别: 1 排序之后查找 2 把出现的数值放到与下标一致的位置,再判断什么位置...
  • kenden23
  • kenden23
  • 2013-12-06 07:52:46
  • 17587

[leetcode]41. First Missing Positive,C++/python实现,hard难度

[leetcode]41. First Missing Positive,C++/python实现,hard难度
  • zl87758539
  • zl87758539
  • 2016-06-16 19:37:56
  • 366

leetcode_c++:First Missing Positive(041)

题目Given an unsorted integer array, find the first missing positive integer.For example, Given [1,2,...
  • mijian1207mijian
  • mijian1207mijian
  • 2016-05-23 00:28:48
  • 167
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 2万+
    积分: 6722
    排名: 4382
    博客专栏
    文章存档
    最新评论