448. Find All Numbers Disappeared in an Array
题目概述
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements of [1, n] inclusive that do not appear in this array.
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
Example:
Input:
[4,3,2,7,8,2,3,1]
Output:
[5,6]
Subscribe to see which companies asked this question.
算法思路
- 判断数组是否为空,为空则返回数组本身;
- 将数组中出现的数字的位置赋值为负数;
- 将输入数组中非负的位置+1放入返回数组。
代码实现
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
if(nums.size()==0) return nums;
vector<int>disnum;
int j=1;
for(int i=0; i<nums.size(); i++){//将数组中出现的数字的位置赋值为负数
int m=abs(nums[i])-1;
nums[m]=nums[m]>0?-nums[m]:nums[m];
}
for(int i=0; i<nums.size(); i++){//将输入数组中非负的位置+1放入返回数组
if(nums[i]>0){
disnum.push_back(i+1);
}
}
return disnum;
}
};

本文介绍了一种在O(n)时间内查找指定范围内未出现在数组中的所有整数的方法。该算法利用了数组自身作为标记,通过将出现过的数字对应位置设置为负数来标记已出现的元素,最终遍历数组找出未被标记的元素即为答案。

7311

被折叠的 条评论
为什么被折叠?



