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


这个题是真的没做出来,自己的代码写的很撒比,看了一下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;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值