41. 缺失的第一个正数
题目链接:https://leetcode.cn/problems/first-missing-positive/description/
解析:
这道题蛮有意思的,隐含了一个条件,要找的数一定在[1, N + 1]之间,所以就将大于0且小于等于N的数放到相应的下标位置
最后遍历哪个位置不符合就好了
class Solution { public: int firstMissingPositive(vector<int>& nums) { int n = nums.size(); for (int i = 0; i < n; i++) { if (nums[i] > n) { nums[i] = -1; } else if (nums[i] <= 0) { continue; } else { while(nums[i] > 0 && nums[i] <= n && i != nums[i] - 1) { if (nums[i] == nums[nums[i] - 1]) { nums[i] = -1; } else { swap(nums[i], nums[nums[i] - 1]); } } } } int j = 0; for (; j < n; j++) { if (nums[j] <= 0 || nums[j] - 1 != j) break; } return j + 1; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号