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。