题目描述:
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
链接:https://leetcode-cn.com/problems/contains-duplicate-ii
思路:
1.map收集下标和对应元素,一次遍历,对比
2.为了考虑多个相同元素的情况,使用map中使用数组收集下标
代码实现:
class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Map<Integer,ArrayList<Integer>> map = new HashMap<Integer,ArrayList<Integer>>();for(int i = 0;i < nums.length;i++) {int val = nums[i];if (map.get(val) == null) {map.put(val, new ArrayList<Integer>());}ArrayList<Integer> list = map.get(val);for(int n : list) {if (Math.abs(i-n) <= k ) {return true;}}list.add(i);}return false;}}
