41. 缺失的第一个正数
Posted 潜行前行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了41. 缺失的第一个正数相关的知识,希望对你有一定的参考价值。
- 缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:
输入:nums = [3,4,-1,1]
输出:2
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
提示:
1 <= nums.length <= 5 * 105
-231 <= nums[i] <= 231 - 1
通过次数221,132提交次数519,587
关键点
- 原地哈希。小于 1 的元素转为大于数组个数的值,如:size+1。然后以元素值为下标,小于等于 n ,数组中对应值设置为 负数。从左往右遍历数组,第一个不为负数,则表示其下标元素不存在。
class Solution
public int firstMissingPositive(int[] nums)
for(int i=0; i<nums.length; i++)
if(nums[i] <= 0) // 零和负数设置为正数
nums[i] = nums.length + 1;
for(int i=0; i<nums.length; i++)
int index = Math.abs(nums[i]);
if(index <= nums.length )
nums[index-1] = -Math.abs(nums[index-1]); //下标存在则为零
for(int i=0; i<nums.length; i++)
if(nums[i] > 0 )
return i+1;
return nums.length+1; // [1,2,3] 则是 4
以上是关于41. 缺失的第一个正数的主要内容,如果未能解决你的问题,请参考以下文章