题目链接

【题解】

先明确一点假设给的数字有n个。 那么最后的答案最情况下就是n+1 首先我们先判断一下所给的数组里面有没有1 如果没有直接返回1 否则。 把数组中所有的范围超过n或者小于1的数字全都改成数字1 然后扫描一遍整个数组。 for(int i = 0;i<(int)nums.size();i++) 如果遇到num[i] 那么就把num[abs(num[i])]置为负数(即取相反数),当然如果它本来就是负数,那就不用管它。 最后再扫描一遍整个数组。 哪个下标对应的数字是正的,就说明那个数字没有出现过。则返回那个数字就好了。

【代码】

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        bool ok = false;
        for (int x:nums){
            if (x==1){
                ok = true;
            }
        }
        if (!ok) return 1;
        int len = nums.size();
        for (int i = 0;i < len;i++){
            if (nums[i]>len || nums[i]<1){
                nums[i] = 1;
            }
        }
        for (int i = 0;i < len;i++){
            int x = nums[i];
            if (x<0){
                x=-x;
            }
            nums[x-1]=-abs(nums[x-1]);
        }
        for (int i = 0;i < len;i++)
            if (nums[i]>0)
                return i+1;
        return len+1;
    }
};

相关文章:

  • 2021-10-21
  • 2021-12-17
  • 2021-05-27
  • 2021-12-08
  • 2022-01-29
  • 2022-12-23
  • 2022-03-08
  • 2021-06-24
猜你喜欢
  • 2021-08-21
  • 2021-12-21
  • 2021-05-20
  • 2022-12-23
  • 2021-06-02
  • 2021-05-14
  • 2022-12-23
相关资源
相似解决方案