Leetcode 448. Find All Numbers Disappeared in an Array
来源:互联网 发布:blct升级数据 编辑:程序博客网 时间:2024/06/05 18:04
Given an arrayof integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twiceand others appear once.
Find all theelements of [1, n] inclusive that do not appear in this array.
Could you do itwithout extra space and in O(n) runtime? You may assume the returned list doesnot count as extra space.
Example:
Input:
[4,3,2,7,8,2,3,1]
Output:
[5,6]
题目的意思是长度为n的数组存了1~n范围的整数,有一些数缺失了,有一些数出现了两次,让找到所有缺失的数。
方法1:设置一个标记数组flag,flag下标对应数组中的数,遍历数组中的数,把对应的下标元素标记为1;再遍历flag,元素值为0的就是缺失的数。
优点是思路简单,时间复杂度低O(n),缺点是需要额外空间。
但是题目要求不能开辟额外空间,所以不满足题目要求。
class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int>flag(nums.size()+1, 0); vector<int>re; for(int x:nums) flag[x]=1; for(int i=1; i<=nums.size(); ++i) { if(!flag[i]) re.push_back(i); } return re; }};
方法2:由于题目中有数组中所有数字都大于等于1且小于等于n,而n为数组长度这一条件。所以思路1中不要额外开辟一个标记数组,就用原来的数组自己来标记就行了。将以nums数组元素为下标的数标记为负数,最后遍历,元素值为正数对应的下标值就是缺失元素。时间复杂度O(n),不需要开辟额外空间。
class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int>re; for(int x:nums) { if(nums[abs(x)-1]>0) nums[abs(x)-1]*=-1; } for(int i=0; i<nums.size(); ++i) { if(nums[i]>0) re.push_back(i+1); } return re; }};
阅读全文
0 0
- LeetCode-Array-448. Find All Numbers Disappeared in an Array
- leetcode:448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array
- <leetcode>448.Find All Numbers Disappeared in an Array
- [LeetCode] 448. Find All Numbers Disappeared in an Array
- [LeetCode]448. Find All Numbers Disappeared in an Array
- leetcode 448. Find All Numbers Disappeared in an Array
- Leetcode 448. Find All Numbers Disappeared in an Array
- 【LeetCode】 448. Find All Numbers Disappeared in an Array
- 448. [LeetCode]Find All Numbers Disappeared in an Array
- [leetcode] 448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array
- Leetcode-448. Find All Numbers Disappeared in an Array
- 【Leetcode】448. Find All Numbers Disappeared in an Array
- LeetCode - 448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array
- LeetCode--448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array(Java)
- linux CentOS 7 安装 java1.8
- Android网络请求-sign参数的设置
- 日常咸鱼记录17/12/13,更新Vmware Tools
- C++ 关于sort
- 2017-12-13 杂记
- Leetcode 448. Find All Numbers Disappeared in an Array
- JavaScript基础
- WinForm,在另一个线程中更新Form中的数据
- 10、变量种类、赋值、脚本参数调用、bash配置文件、算术、数值字符对比
- 泛微e-cology和Oracle无法启动的解决方案
- 1006. 换个格式输出整数 (15)
- 二分查找算法
- TOJ 5266: 三角形相似
- Spring AOP实现原理