448. 找到所有数组中消失的数字

题目

image-20240909141247181

解法

根据题目给出的要求,正确数组应该是所有数字各不相同,即意味着所有所有数据都可以看做是该数组的有效索引+1,

在第一个for循环中处理的就这这个内容,将数据转换为索引并在对应的位置上+n, %n的操作是防止该位置上的值已经被+n过从而导致索引越界。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vector<int> Array::findDisappearedNumbers(vector<int>& nums)
{
int n = nums.size();

//索引处理
for (int& x : nums)
{
int i = (x - 1) % n;
nums[i] += n;
}

//最后的结果是根据索引来处理,那个值没有变动,就代表这个位置的索引+1的数没有出现
vector<int> res;
for (int i = 0; i < n; i++)
{
cout << nums[i] << " ";
if (nums[i] <= n)
{
res.push_back(i+1);
}
}

return res;
}