力扣简219 存在重复元素2
自己写的 用了map

package leetcode01; import java.util.HashMap; import java.util.Map; //我无语 看不清题目咱就是 人说的是小于等于 不是等于! /*给你一个整数数组nums和一个整数k,判断数组中是否存在两个不同的索引i和j, 满足 nums[i]==nums[j]且 abs(i-j)<=k。如果存在,返回 true;否则,返回 false。 */ public class Solution219 { public static boolean containsNearbyDuplicate(int[] nums, int k) { Map<Integer, Integer> map=new HashMap<Integer, Integer>(); for(int i=0;i<nums.length;i++) { if(map.containsKey(nums[i])) { if(Math.abs(i-map.get(nums[i]))<=k) { return true; } map.replace(nums[i], i); } map.put(nums[i], i); } return false; } public static void main(String[] args) { // TODO Auto-generated method stub int[] nums= {1,2,3,4,1,5}; System.out.print(containsNearbyDuplicate(nums,4)); } }
看了题解:滑动窗口:

public static boolean containsNearbyDuplicate(int[] nums, int k) { Set<Integer> set=new HashSet<Integer>(); for(int i=0;i<nums.length;i++) { if(i>k) { set.remove(nums[i-k-1]); } if(!set.add(nums[i])){ return true; } } return false; }

浙公网安备 33010602011771号