leetcode 448. 找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
开始直接用循环便利处理,用count函数来查找缺少哪一个元素,这种情况引起了运行超时,后来发现利用下标来判断[1,nums.size()]的元素是否出现,利用一次循环遍历即可解决。
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums)
{
vector<int> res;
for(int i=0;i<nums.size();i++)
{
int index=(nums[i]-1)%nums.size(); //挑选下标,-1是因为是从数值1开始的
nums[index]+=nums.size();//挑中的下标自加数组长度
}
for(int i=0;i<nums.size();i++)
{
if(nums[i]<=nums.size())//开始循环遍历
{
res.push_back(i+1);//发现对应下标下的元素不大于等于数组长度,说明上面的操作没有遍历到,则说明数组中没有这个对应下标的元素,所以应加入res
}
}
return res;
}
};