Java 题解 | #奶牛排队问题#
奶牛排队问题
https://www.nowcoder.com/practice/e974a33a14a344278c3a359a1ebf833e
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>> t = new
HashMap<>(); // 哈希表,用于存储重量和对应的索引列表
for (int i = 0; i < n; i++) {
if (!t.containsKey(weights[i])) {
t.put(weights[i], new ArrayList<>());
}
t.get(weights[i]).add(i); // 将索引添加到对应的重量的索引列表中
}
for (ArrayList<Integer> indices : t.values()) {
for (int i = 1; i < indices.size(); i++) {
if (indices.get(i) - indices.get(i - 1) <= k) {
return true; // 存在相邻元素索引差小于等于k的情况,返回true
}
}
}
return false; // 没有找到相邻元素索引差小于等于k的情况,返回false
}
}
使用的是Java语言。
该题考察的知识点是哈希表的使用和元素统计。
- 创建一个HashMap对象t用于存储每个重量对应的索引列表。
- 使用for循环遍历给定的重量数组weights,对于数组中的每个重量weight,首先判断t哈希表中是否包含该重量的键。如果不存在,则在t哈希表中添加新的键值对,其中键为重量,值为一个空的ArrayList对象。
- 获取t哈希表中指定键对应的索引列表,并将当前索引i添加到该列表中。
- 遍历t哈希表中的每个值(即索引列表),对每个索引列表执行以下操作:a. 使用for循环遍历索引列表,从第二个索引开始(索引i=1),依次比较当前索引与前一个索引之间的差值是否小于等于k。如果满足条件,则返回true,表示找到了相邻元素索引差小于等于k的情况。
- 如果遍历结束都没有找到相邻元素索引差小于等于k的情况,返回false。

