首页 > 代码库 > Find All Numbers Disappeared in an Array
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]
本题在一维数组中找到按顺序缺失的数字 按照思维 首先最容易想到的是哈希 那样子的话 很容易得到重复的数字和缺失的数字 可是本题中不允许使用额外的空间
同时 如果简单的使用哈希 也并没有应用到本题中题目的特性 本题题目中 一维数组大小为n 其中的数字也都是1~n的 其实这些数字减一即为数组的下标0~n-1
要好好利用数组中数字和数组下标的关系 在一次按照下标遍历中 既可以按当前下标中的数字为下标 操作对应的数字 标定这个数字已经出现 多次出现 标定一次就好 当然 不同的标定也可以
就例子而言:从数组的第一个下表中的数字开始 4,找到其对应下表4-1:3, 数组中下标为3的地方标定一下 表示数组中(3+1)已经出现过了
当以这样的方式标定为完整个数组时 那么出现过的数字对应的下标的位置都被标定 没出现过的即没有被标定 遍历一次就可以了
代码:
vector<int> findDisappearedNumbers(vector<int>& nums) {
vector<int> res;
if (nums.size()==0)
return res;
for (int i=0; i<nums.size();++i)
{
int m=abs(nums[i])-1;
if (nums[m]>0)
nums[m] = -nums[m];
}
for (int i=0; i<nums.size();++i)
{
if (nums[i]>0)
res.push_back(i+1);
}
return res;
}
Find All Numbers Disappeared in an Array
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。