zoukankan      html  css  js  c++  java
  • 41. 缺失的第一个正数

    时间复杂度低,可考虑哈希表,但是考虑空间复杂度,只能用想其他办法。

    可以通过将每个正数放在适合的位置,然后检查是否第一个位置对应不上的数就是第一个正数。

    实际执行时遇到两个问题:

    1.有时候出错了。是因为交换位置后,被换到前面的数字可能还没复位,所以导致没有放在对应的位置上。

      解决方法:交换位置后,指针停留一下。

    2.上面方法导致了另一个问题:当两个位置数字一样时候,进入无限循环。

      解决方法:交换前判断是否相等,不相等时候再交换。

    int firstMissingPositive(vector<int>& nums) {
        int length = nums.size();
        for (int i = 0; i < length; i++)
        {
            if (nums[i] > 0 && nums[i] != i + 1  && nums[i] < length)
            {
                if (nums[i] != nums[nums[i] - 1])
                {
                    std::swap(nums[i], nums[nums[i] - 1]);
                    if (i > 0) i--;
                }
    
            }
    
        }
        for (int i = 0; i < length;i++)
        if (nums[i] != i + 1)
            return i + 1;
        return length+1;
    }
  • 相关阅读:
    word 操作技巧
    有朝一日
    菜狗日记2021.7.10
    记一次JSON.toJSONString()踩坑
    菜狗日记2020.11.13
    菜狗日记2020.11.6
    菜狗日记2020.11.03
    菜狗日记2020.10.29
    菜狗日记2020.10.17
    菜狗日记2020.10.11
  • 原文地址:https://www.cnblogs.com/Oscar67/p/9265307.html
Copyright © 2011-2022 走看看