博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] First Missing Positive
阅读量:6596 次
发布时间:2019-06-24

本文共 1182 字,大约阅读时间需要 3 分钟。

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.

数组哈希法

复杂度

O(N) 时间 O(1) 空间

思路

这道题先得理解深刻,再做

对于一个数组,长度为n,我们在最后返回的答案肯定是[1,n+1]闭区间范围内,超出这个区间不可能是答案,跳过即可
我们要做的就是,两步走:
1.把数组中有可能是答案的数([1,n+1]闭区间内的数)放在正确的位置上:num放在下标为num-1的位置上,比如4放在下标为3的位置上,注意有可能是答案的数才放,此时不会数组越界。
2.最后在这些可能的位置上找答案,这些位置是0到n-1。
举几个例子:
[5,6,7],答案:1
[5],答案:1
[-5],答案:1
[0],答案:1
[1],答案:2
[2,2],答案:1
注意最后这个例子,对于第一个2,这个数在答案区间内,可是我们发现在他应该出现的位置上已经是他了,那么我们视当前这个位置的2不是答案,跳过这个。这个特例需要注意哟~

注意

注意[2,2]这种情况哟

代码

public class Solution {    public int firstMissingPositive(int[] nums) {        for (int i = 0; i < nums.length; ) {            int n = nums[i];            if (n >= 1 && n <= nums.length + 1 && nums[n - 1] != n) {//这个数在答案区间                int tmp = nums[n - 1];                nums[n - 1] = n;                nums[i] = tmp;            } else {    //不在答案区间跳过不管                i++;            }        }        for (int i = 1; i < 1 + nums.length; i++) {            if (nums[i - 1] != i)                return i;        }        return nums.length + 1;    }}

转载地址:http://yrcio.baihongyu.com/

你可能感兴趣的文章
小经验:图像精确计算时,注意jpg 与bmp的区别
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
链表三:反转链表
查看>>
通过触发器记录数据库连接信息
查看>>
Python教程
查看>>
1 dev repo organize
查看>>
ImmediateFunc.js
查看>>
jmeter参数化之 CSV data set config
查看>>
分组背包,每组最多选1个
查看>>
牛客国庆集训派对Day3 B Tree
查看>>
PHP 笔记——基础
查看>>
Java -- 深入浅出GC自动回收机制
查看>>
开发自己的脚本引擎(一)先吹吹水,再干事情。
查看>>
python中判断对象类型的函数——isinstance
查看>>
计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task
查看>>
javascript版前端页面RSA非对称加密解密
查看>>
convex optimization(ebook+tutorial)best
查看>>
L1 minimization
查看>>
English Corner
查看>>
caffe扩展实验
查看>>