leetcode编程记录15 #442 Find All Duplicates in an Array
2017-12-03 12:16
381 查看
leetcode编程记录15 #442 Find All Duplicates in an Array
标签(空格分隔): leetcode这次是一道比较简答的题目,但很有技巧性的一道题目,主要是要我们能够充分的利用题目的条件和所给的存储空间。题目如下:
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]
题目分析与理解:
这道题目要我们不使用多余的存储空间然后要在o(n)的时间里面完成重复元素的记录,乍一看是不太可能的事情,但是我们要注意题目的条件,它所给出的每个数组中的元素的大小都是不超过数组索引的大小,那么我们显然就可以利用数组元素的这个信息来访问对应索引的数组元素,但是怎样才能知道数组元素中所存放的这个数有没有重复过呢?我们可以将根据数组元素索引到的数组元素的前一位设为负数,然后通过检查这一位的元素是否是负数来判断是否重复。
代码如下:
class Solution { public: vector<int> findDuplicates(vector<int>& nums) { vector<int> result; for (int i = 0; i < nums.size(); ++i) { int lastI = abs(nums[i]) - 1; if (nums[lastI] < 0) {result.push_back(abs(nums[i]));} nums[lastI] = -nums[lastI]; } return result; } };
相关文章推荐
- [C语言][LeetCode][442]Find All Duplicates in an Array
- leetcode442 Find All Duplicates In An Array Java
- LeetCode-442-Find All Duplicates in an Array-M
- LeetCode - 442 - Find All Duplicates in an Array
- 448. Find All Numbers Disappeared in an Array and 442 Find All Duplicates in an Array
- Find All Duplicates in an Array,leetcode,442
- leetcode 442 Find All Duplicates in an Array C++
- LeetCode 442 Find All Duplicates in an Array
- Promblem 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
- 【442】Find All Duplicates in an Array
- Leetcode 442-Find All Duplicates in an Array
- leetcode442 Find All Duplicates in an Array
- 【LeetCode-442】Find All Duplicates in an Array(C++)(
- Find All Duplicates in An Array
- Find All Duplicates in an Array 算法复杂度O(n)的C++实现
- LeetCode Find All Duplicates in an Array
- leetcode之Find All Duplicates in an Array 问题