【Leetcode】Contains Duplicate II

来源:互联网 发布:闪字风扇软件下载 编辑:程序博客网 时间:2024/06/04 22:19

题目链接:https://leetcode.com/problems/contains-duplicate-ii/

题目:

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and is at most k.

思路:

1、用HashMap保存元素的下标,如果出现重复元素,则判断是否满足 i-j<=k,不满足则更新HashMap保存的下标,因为后面的元素可能还有重复,要跟最近的重复元素比较距离。

2、用Set,具体看代码。。。时间久了我也忘了具体怎么做的。。。。
算法1:

public boolean containsNearbyDuplicate(int[] nums, int k) {HashMap<Integer, Integer> set = new HashMap<Integer, Integer>();for (int i = 0; i < nums.length; i++) {if (!set.containsKey(nums[i])) {set.put(nums[i], i);// 记录起始位置} else {if (i - set.get(nums[i]) <= k) {return true;} else {set.put(nums[i], i);}}}return false;}


算法2:

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


0 0