leetcode 41. 缺失的第一个正数

遍历数组,将数组中数字在0至n-1的放在0至n-1的位置
从头遍历,第一个i位置上不是i的时候 返回i

需要考虑重复元素的情况,故交换元素的时候要加上条件
if( nums[i]>=0 && nums[i] < nums.size() && i != nums[i] && nums[i] != nums[ nums[i]] )

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        if( nums.size() == 0 ){
            return 1;
        }

        for(int i=0;i < nums.size();){
            if( nums[i]>=0 && nums[i] < nums.size() && i != nums[i] && nums[i] != nums[ nums[i]] ){
                swap( nums[i] ,nums[nums[i]] );
            }else{
                i++;
            }
        }


        for(int i=1;i<nums.size();i++){
            if( i!=nums[i] ){
                return i;
            }
        }
        if( nums[0] == nums.size() ){
            return nums.size()+1;
        }
        return nums.size();
    }
};

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页