Leetcode刷题100天(阿里云周赛)—查找数组中的所有重复项(哈希)—day42

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天(阿里云周赛)—查找数组中的所有重复项(哈希)—day42相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫运智

描述

给定一个整数数组,1 ≤ a[i] ≤ n(n = 数组的大小),一些元素出现两次,其他元素出现一次。

找到在此数组中出现两次的所有元素。

示例

样例1

输入:
[4,3,2,7,8,2,3,1]
输出:
[2,3]

样例2

输入:
[10,2,5,10,9,1,1,4,3,7]
输出:
[1,10]

这里要按照顺序输出,我使用entry被卡主le

package 阿里云周赛;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/*
 * https://tianchi.aliyun.com/oj/589132502606324130/633179267010859822
 *解题思路:我一看到要统计次数我就想到要用哈希,然后他是要按照顺序输出的,这给的题解输出有问题,给我整傻了
 */
public class 查找数组中的所有重复项 {
    public static List<Integer> findDuplicates(int[] nums) {
//    	定义一个返回值
        List<Integer> res=new ArrayList<Integer>();
//    	如果长度小于2说明无法满足两次的要求,直接返回null
    	if (nums.length<2) {
			return res;
		}
//    	定义哈希统计次数
    	HashMap<Integer, Integer> map=new HashMap<>();
    	for(int num:nums) {
    		map.put(num, map.getOrDefault(num, 0)+1);
//    		每遍历一次就判断是否满足两次,如果满足还得判断是否添加过了
    		if (map.get(num)==2&&!res.contains(num)) {
				res.add(num);
			}
    	}

//    	for (Map.Entry<Integer, Integer> entry: map.entrySet()) {
//    	    int i=entry.getValue();
//    	    if (i==2) {
//				res.add(entry.getKey());
//			}
//    	      	    
//    	}
    	return res;
    }
    public static void main(String args[]) {
    	int[] nums= {4,3,2,7,8,3,2,1};
    	List<Integer> res=findDuplicates(nums);
    	System.out.print(res);
    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天(阿里云周赛)—查找数组中的所有重复项(哈希)—day42的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天(阿里云周赛)—查找数组中的所有重复项(哈希)—day42

Leetcode刷题100天(阿里云周赛)—查找数组中的所有重复项(哈希)—day42

Leetcode刷题100天(阿里云周赛)—在排序链表中插入一个节点(链表)—day42

Leetcode刷题100天(阿里云周赛)—在排序链表中插入一个节点(链表)—day42

Leetcode刷题100天—5868. 可互换矩形的组数(哈希)—day36(周赛)

Leetcode刷题100天—5867. 反转单词前缀(字符串+双指针)—day36(周赛)