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) { HashMap<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < weights.length; i++) { if (map.containsKey(weights[i])) { Integer integer = map.get(weights[i]); if (i - integer <= k) { return true; } } map.put(weights[i], i); } return false; } }
本题知识点分析:
1.哈希表的存取
2.数组遍历
3.数学模拟
本题解题思路分析:
1.如果map中已经包含了weight[i]
2.判断两个相同数字的索引距离是否小于等于k
3.如果小于等于,返回true
4.map.put(weight[i],i)放入集合,并且记录索引,这个其实是有点妙处的,因为假如重复的数字出现多次,比如1出现3次,假如第一次的1和第二次的1距离大于K不符合,但是第三次的1就应该去和第二次的1索引比较,而不是第一次的索引1,这时候put巧妙的进行了覆盖,因为key相同情况下,value会进行覆盖。
本题使用编程语言: Java
如果您觉得本篇文章对您有帮助,可以点个赞支持一下,感谢~