欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

学习笔记和每日一题 - 输入: nums = [7,8,9,11,12] 输出:1 解释: 最小的正数 1 没有出现:最小的正数 1 没有出现。 提示

最编程 2024-10-18 07:18:14
...
  • 1 <= nums.length <= 105
  • -231 <= nums[i] <= 231 - 1
class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        //获取数组长度
        int n=nums.size();
        //当数字在0到n之间且数字x-1的位置不为x
        for(int i=0;i<n;i++){
            while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){
                //交换,直到x-1的位置为x
                swap(nums[nums[i]-1],nums[i]);
            }
        }
        //遍历数组,若x的位置不为x+1,说明缺失的就是x+1
        for(int i=0;i<n;i++){
            if(nums[i]!=i+1){
                return i+1;
            }
        }
        return n+1;
    }
};

以3,4,-1,1为例,交换的过程是3,4,-1,1→-1,4,3,1→-1,1,3,4→1,-1,3,4。至此完成交换,然后判断是否每个位置的数字为下标i+1,若不是,便是缺失的数字,若都是,最后就是n+1。