[LeetCode] 41. First Missing Positive

来源:互联网 发布:网络机顶盒排行榜 编辑:程序博客网 时间:2024/05/21 21:42

思路:
参考了多篇博客, 大家的思路差不多都一样, 把元素放到属于他的格子里. 首先看数组内第i个元素是不是i + 1, 如果不是看这个元素是不是在数组长度范围内, 如果依然符合条件的话再看目标位置的元素和现在的元素一样不一样, 要是一样就不用换了而且跳出这个格子进下一个.
这样遍历完所有格子后, 再从头遍历一遍, 第一次遇到哪个格子的值不是索引值加1, 那第一个丢失的正数就是他的索引值加1, 返回结果. 如果遍历完了依然都符合要求, 就说明前面从1开始没有断的正数, 返回数组长度加1即可.

int firstMissingPositive(vector<int>& nums) {    for (int i = 0; i < nums.size(); ) {        if (nums[i] != i + 1             && nums[i] > 0             && nums[i] <= nums.size()            && nums[i] != nums[nums[i] - 1])            swap(nums[i], nums[nums[i] - 1]);        else i++;    }    for (int i = 0; i < nums.size(); i++) {        if (nums[i] != i + 1)            return i + 1;    }    return nums.size() + 1;}
0 0
原创粉丝点击