当前位置: 代码迷 >> 综合 >> leetcode 随笔First Missing Positive
  详细解决方案

leetcode 随笔First Missing Positive

热度:41   发布时间:2024-01-04 09:09:40.0

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)的时间完成


这个题是真的没做出来,自己的代码写的很撒比,看了一下discuss真是服气

最重要的一点是要明白缺的那个数一定是小于等于数组的size的!

一共就这么长的一个数组,缺的那个数最大也是在最后,而且还得是它从1-n排列好的情况下,否则,缺的就是中间的某个数了,而且就会小于size。

想明白这个问题之后就是对数组进行排列了,我们只需要排列其中的正整数即可,就是把可以排列的正整数排到它应该呆的地方去。

比如对于数组a[5]=【-1,2,3,1,5】

1应该呆在a[0]这个位置

2呆在a[1] 3呆在a[2] 5这个数就超出索引范围了,因此不动就行,这样排好后最后的样子差不多是这样的

【1,2,3,-1,5】

然后这样就能一眼看出来答案是“不在位置的数”了。

代码如下:(是我从discuss上参考的代码)

class Solution {
public:int firstMissingPositive(vector<int>& nums) {for(int i=0; i<nums.size(); i++){if(i+1==nums[i]) continue;int x = nums[i];while(x>=1 && x<=nums.size() && x!=nums[x-1]){//这段就是在排列正确的数swap(x, nums[x-1]);}}for(int i=0; i<nums.size(); i++){if(i+1!=nums[i])    return i+1;}return nums.size()+1;}
};

  相关解决方案