LeetCode-442. Find All Duplicates in an Array

标签: LeetCode Array
2人阅读 评论(0) 收藏 举报
分类:

Description

Given an array of integers, 1a[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]

Solution 1(C++)

static int x=[](){std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();
class Solution {
public:
    vector<int> findDuplicates(vector<int>& nums) {
        vector<int> res;
        for(int i=0; i<nums.size(); i++){
            if(nums[abs(nums[i])-1] < 0) res.push_back(abs(nums[i]));
            else nums[abs(nums[i])-1] = 0-nums[abs(nums[i])-1];
        }
        return res;
    }
};

Solution 2(C++)

static const auto _____ = []()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return nullptr;
}();

class Solution {
public:
    vector<int> findDuplicates(vector<int>& nums) {
        // 思路:对数字加数组长度不影响其对数组长度求余的值
        // 如果数组中的元素最终超过2倍数组长度大小的话说明该元素对应的位置的数字出现了两次
        int size = nums.size();
        vector<int> result;
        for(int i = 0; i < size; i++){
            nums[(nums[i] - 1) % size] += size;
        }

        for(int i = 0; i < size; i++){
            if(nums[i] > 2*size) result.push_back(i+1);
        }
        return result;
    }
};

算法分析

第一道medium难度的题,后面应该都是medium难度的题目了,除非真的做不出来了,可以回去看一看easy难度的题。对于这一道题,解法一是我之前也有在easy难度中用过的方法。对于解法二也是很有意思的。

与解法一的相同点就是,都尝试在一次遍历的过程中将数组中出现一次与出现两次的值区分开。都考虑到了数组元素的分布特点是在1~n之间。那么元素值作为索引值,让对应的元素发生变化。区别是,解法一发生的变化是取反,解法二是值增加数组长度的这个常数值。

程序分析

略。

查看评论

leetcode442 Find All Duplicates In An Array Java

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...
  • u013190088
  • u013190088
  • 2017-02-27 14:31:51
  • 197

[leetcode]442. Find All Duplicates in an Array(java)

问题: Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ...
  • gfz19930128
  • gfz19930128
  • 2016-12-05 19:32:25
  • 822

leetcode 442 Find All Duplicates in an Array C++

这道题的思路是把数字对应的位置变成负数,既保留了数字大小,也做了标记。 当第二次遇到这个位置,发现是负数的时候,直接加入到结果数组中即可。 vector findDuplicates(ve...
  • a2331046
  • a2331046
  • 2016-12-23 15:18:53
  • 390

[leetcode] 442. Find All Duplicates in an Array

在数组中找出所有重复出现的数,要求时间复杂度O(n),空间复杂度O(1)
  • Half_open
  • Half_open
  • 2016-10-30 11:19:50
  • 918

LeetCode 442. Find All Duplicates in an Array

Problem Statement(Source) Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some element...
  • junchen1992
  • junchen1992
  • 2016-10-30 14:06:36
  • 1433

Leetcode-442. Find All Duplicates in an Array

前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN...
  • mcf171
  • mcf171
  • 2017-01-30 17:04:17
  • 88

LeetCode 442 --- Find All Duplicates in an Array

题目链接: LeetCode 442 — Find All Duplicates in an Array问题分析: 需要o(n)的时间复杂度并且不能使用额外的存储空间。找出数组中的重复元素。AC代...
  • baidu_33893880
  • baidu_33893880
  • 2017-02-19 19:53:49
  • 502

leetcode_442. Find All Duplicates in an Array 找数组中出现两次的数,正负号标记法

题目: Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice an...
  • qqzj_bupt
  • qqzj_bupt
  • 2016-12-29 16:00:13
  • 335

leetcode之Find All Numbers Disappeared in an Array

问题来源:Find All Numbers Disappeared in an Array 很久没有刷题了,感觉大脑开始迟钝,所以决定重拾刷题的乐趣。一开始不要太难,选一些通过率高的题目做,然后就看...
  • yutianzuijin
  • yutianzuijin
  • 2016-12-24 18:21:10
  • 7306

【Leetcode】Combination Sum IV

题目链接: https://leetcode.com/problems/combination-sum-iv/ 题目: Given an integer array with a...
  • yeqiuzs
  • yeqiuzs
  • 2016-07-25 22:43:10
  • 4221
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 2522
    排名: 1万+
    文章存档
    最新评论