剑指offer五十之数组中重复的数字

Posted AI菌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer五十之数组中重复的数字相关的知识,希望对你有一定的参考价值。

一、题目

  在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

二、思路

解法一:采用LinkedHashMap的解法

解法二:详见代码(推荐)

三、代码

解法一:

技术分享
package cn1;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;


public class Solution {
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        boolean flag=false;

        if(numbers==null||length==0){
            return flag;
        }

        //统计字符串的个数,注意用LinkedHashMap
        LinkedHashMap<Integer, Integer> lhm = new LinkedHashMap<Integer, Integer>();
        for (int num :numbers) {
            if (lhm.containsKey(num)) {
                lhm.put(num, lhm.get(num) + 1);
            } else {
                lhm.put(num, 1);
            }
        }

        //遍历map,寻找第一个只出现一次的数
        int  val= -1;

        Set<Map.Entry< Integer, Integer>> set = lhm.entrySet();
        for (Map.Entry< Integer, Integer> es : set) {
            int key = es.getKey();
            int value = es.getValue();
            if (value >= 2) {
                val= key;
                break;
            }
        }

        if(val!=-1){
            duplication[0]=val;
            flag=true;
        }

        //返回结果
        return flag;
    }
}
View Code

解法二:

技术分享
public boolean duplicate(int numbers[], int length, int[] duplication) {
        boolean[] k = new boolean[length];
        for (int i = 0; i < k.length; i++) {
            if (k[numbers[i]] == true) {
                duplication[0] = numbers[i];
                return true;
            }
            k[numbers[i]] = true;
        }
        return false;
}
View Code

---------------------------------------------

参考链接:

https://www.nowcoder.com/questionTerminal/623a5ac0ea5b4e5f95552655361ae0a8


以上是关于剑指offer五十之数组中重复的数字的主要内容,如果未能解决你的问题,请参考以下文章

《剑指offer》第五十六题II:数组中唯一只出现一次的数字

《剑指offer》第五十六题I:数组中只出现一次的两个数字

剑指Offer1数组中重复的数字

《剑指Offer——找出数组中重复的数字》代码

剑指offer03数组中重复的数字

剑指 Offer 03. 数组中重复的数字 的 详细题解