class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int minNumberDisappeared(vector<int>& nums) { int n = nums.size(); for (auto &i: nums) { if (i <= 0) { i = n + 1; } } for (auto &i: nums) { int tmp = abs(i); if (tmp > 0 && tmp <= n && nums[tmp - 1] > 0) { nums[tmp - 1] = -nums[tmp - 1]; } } for (int i = 0; i < n; ++i) { if (nums[i] > 0) { return i + 1; } } return n + 1; } };
思路:直接用原数组哈希。
* 第一次遍历,先将非正数全部转成n+1,确保不会影响结果。
* 第二次遍历,将每个元素表示的数组下标位置的数转成负数。
* 第三次遍历,找到数组中第一个不为负数的。