前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[LeetCode] 442. Find All Duplicates in an Array

[LeetCode] 442. Find All Duplicates in an Array

作者头像
用户1148830
发布2018-01-03 17:45:45
6360
发布2018-01-03 17:45:45
举报

【原题】 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:

代码语言:javascript
复制
[4,3,2,7,8,2,3,1]

Output:

代码语言:javascript
复制
[2,3]

【解释】 给定一个含有那个元素的数组, 数组中的元素要么出现一次要么出现两次,要求找出数组中所有的重复元素。 【思路】 因为数组元素的取值都不会越界,且数组只有出现一次和两次良好总可能性,那么可以把书组元素当成是数组的index。循环每次index-1的数乘上-1,若该index-1元素已经为负数,则说明该index之前已经出现过,故必为重复元素,将其加到list即可。

因为这里最多出现两次,所以不需要判断要加入的元素是否会存在list中,刚开始博主就是这样的思想,判断会增加时间复杂度,最终最后一个测试用例不通过,会后换成hashset,再转成list才通过[捂脸]。

代码语言:javascript
复制
public class Solution {
    public List<Integer> findDuplicates(int[] nums) {
        List<Integer> list=new ArrayList<Integer>();
        //HashSet<Integer> hashSet=new HashSet<>();
        for(int i=0;i<nums.length;i++){
            int index=Math.abs(nums[i]);
            if(nums[index-1]<0) //若该index已经为负数,说明前面已经出现过,则这个index肯定是重复的元素
                 list.add(index);
            nums[index-1]*=-1;
        }
        return list;

    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年06月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档