[Leetcode] 442. Find All Duplicates in an Array 解题报告
来源:互联网 发布:贸易结构优化 编辑:程序博客网 时间:2024/05/28 23:21
题目:
Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements that appear twice in this array.
Could you do it without extra space and in O(n) runtime?
Example:
Input:[4,3,2,7,8,2,3,1]Output:[2,3]
思路:
要求不能用额外空间,那么就只能inplace的修改数组了。我们的思路是:遍历数组,将value = nums[i]交换到nums[value - 1]的位置,这样在当发现两个要交换的位置上的数字相同时,则说明找到了一个重复数字。为了避免后面继续再找到,我们将其中一个置为0。
那么算法的时间复杂度怎么分析呢?虽然在for循环里面还嵌套了一个while循环,但是仔细观察可以发现,每个value最多被移动一次,这样实际上整个for循环执行下来,while被执行的次数总和不过O(n),因此总的时间复杂度其实就是O(n)。
代码:
class Solution {public: vector<int> findDuplicates(vector<int>& nums) { vector<int> ret; for (int i = 0; i < nums.size(); ++i) { while (nums[i] != i + 1) { int value = nums[i]; if (value == 0) { break; } if (nums[value - 1] == nums[i]) { // duplicates found ret.push_back(value); nums[value - 1] = 0; } nums[i] = nums[value - 1]; nums[value - 1] = value; } } return ret; }};
阅读全文
0 0
- [LeetCode] 442. Find All Duplicates in an Array 解题报告
- [Leetcode] 442. Find All Duplicates in an Array 解题报告
- 【LeetCode】Find All Numbers Disappeared in an Array 解题报告
- [LeetCode]Find All Duplicates in an Array
- LeetCode Find All Duplicates in an Array
- Leetcode Find All Duplicates in an Array
- [Leetcode] Find All Duplicates in an Array
- leetCode-Find All Duplicates in an Array
- [leetcode] 442. Find All Duplicates in an Array
- LeetCode 442. Find All Duplicates in an Array
- leetcode:442. Find All Duplicates in an Array
- 442. Find All Duplicates in an Array(LeetCode)
- <leetcode>442. Find All Duplicates in an Array
- [leetcode]442. Find All Duplicates in an Array(java)
- [LeetCode]442. Find All Duplicates in an Array
- Leetcode 442. Find All Duplicates in an Array
- LeetCode笔记:442. Find All Duplicates in an Array
- 【LeetCode】 442. Find All Duplicates in an Array
- serInterval 运动(js)
- idea find duplicated code 关闭idea的 duplicated code 提示
- 回车键触发input渲染到ul的li中
- WeUI的radio与cheakedBox选中与设置选中问题
- 每日一练15
- [Leetcode] 442. Find All Duplicates in an Array 解题报告
- Android调用腾讯地图app导航
- tensorflow 常用语句
- ros 坐标系
- JSON.parse()和JSON.stringify()
- <小田吃饺子> LINUX:Contos7.0 / 7.2 LAMP+R 下载安装Redis篇
- java本地上传图片到阿里云服务器的共享文件夹
- RabbitMQ原理与相关操作(二)
- 中频滤波器和镜像抑制滤波器