• 剑指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

  • 相关阅读:
    re模块的split(),sub()方法 新发现
    tf.where()&np.random.RandomState.rand()&np.vstack&np.mgrid .ravel np.c_[]
    Embedding实现1pre1
    tf.keras训练iris数据集
    tf.keras 搭建神经网络六部法
    循环计算过程(4pre1)
    池化(pooling)舍弃(dropout)& 卷积神经网络
    [C]gcc编译器的一些常用语法
    [POSIX]文件系统(概述)
    [Linux]PHP-FPM与NGINX的两种通讯方式
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7670348.html
Copyright © 2020-2023  润新知