645. Set Mismatch
The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of the numbers in the set got duplicated to another number in the set, which results in repetition of one number and loss of another number.
Given an array nums representing the data status of this set after the error. Your task is to firstly find the number occurs twice and then find the number that is missing. Return them in the form of an array.
Example 1:
Input: nums = [1,2,2,4] Output: [2,3]
Note:
- The given array size will in the range [2, 10000].
- The given array's numbers won't have any order.
解题思路:
1. 将出现过的数字所对应数组中位置上的数字改写为负数,如果第二次访问到一个负数,说明当前位置对应的数字出现重复。
2. 顺序遍历数组,如果某个位置上的数不为负数,说明这个数字不存在。
刷题记录:
1. 一刷,使用比较复杂的方法做的,而且出现BUG
class Solution { public: vector<int> findErrorNums(vector<int>& nums) { vector<int> ret(2, 0); for (int num : nums) { if (nums[abs(num) - 1] < 0) { ret[0] = abs(num); } else { nums[abs(num) - 1] = -nums[abs(num) - 1]; } } for (int i = 0; i < nums.size(); i++) { if (nums[i] > 0) { ret[1] = i + 1; break; } } return ret; } };