题目考察的知识点

考察哈希算法的应用

题目解答方法的文字分析

对于本题,构建哈希表用于存储(体重:所在位置的序列),随后遍历,检查有同一体重下有多个位置的集合中是否有满足位置间距小于k的存在,如果存在就返回true。具体细节参看代码注释即可。

本题解析所用的编程语言

使用Java语言解答

完整且正确的编程代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param weights int整型一维数组 
     * @param n int整型 
     * @param k int整型 
     * @return bool布尔型
     */
    public boolean checkDuplicate (int[] weights, int n, int k) {
        // write code here
        HashMap<Integer,ArrayList<Integer>> map = new HashMap<>(); // 体重:所在位置的序列
        for(int i=0; i<n; i++){
            if(map.containsKey(weights[i])){
                ArrayList<Integer> l = map.get(weights[i]);
                l.add(i); //记录位置
            }else{
                ArrayList<Integer> l = new ArrayList<>();
                l.add(i);
                map.put(weights[i],l);
            }
        }
        for(int num:map.keySet()){
            if(map.get(num).size()<=1) continue;
            else{ //存在多个相同体重的牛
                ArrayList<Integer> temp = map.get(num);
                int len = temp.size();
                for(int i=1; i<len; i++){
                    if(temp.get(i)-temp.get(i-1)<=k) return true; //存在争抢的情况
                }
            }
        }
        return false;
    }
}