448 Find All Numbers Disappeared in an Array 找到所有数组中消失的数字
Posted lina2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了448 Find All Numbers Disappeared in an Array 找到所有数组中消失的数字相关的知识,希望对你有一定的参考价值。
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
找到所有在 [1, n] 范围之间没有出现在数组中的数字。
您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。
示例:
输入:
[4,3,2,7,8,2,3,1]
输出:
[5,6]
详见:https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/description/
C++:
方法一:
class Solution { public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int> res; for (int i = 0; i < nums.size(); ++i) { int idx = abs(nums[i]) - 1; nums[idx] = (nums[idx] > 0) ? -nums[idx] : nums[idx]; } for (int i = 0; i < nums.size(); ++i) { if (nums[i] > 0) { res.push_back(i + 1); } } return res; } };
方法二:
class Solution { public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int> res; for (int i = 0; i < nums.size(); ++i) { if (nums[i] != nums[nums[i] - 1]) { swap(nums[i], nums[nums[i] - 1]); --i; } } for (int i = 0; i < nums.size(); ++i) { if (nums[i] != i + 1) { res.push_back(i + 1); } } return res; } };
参考:https://www.cnblogs.com/grandyang/p/6222149.html
以上是关于448 Find All Numbers Disappeared in an Array 找到所有数组中消失的数字的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 448. Find All Numbers Disappeared in an Array
448. Find All Numbers Disappeared in an Array
448. Find All Numbers Disappeared in an Array
448. Find All Numbers Disappeared in an Array