219 Contains Duplicate II(包含重复的数II)

题目:

Given an array of integers and an integer k, find out whether there there are two distinct indices(不同的指数) i and j in the array such thatnums[i] = nums[j] and the difference between i and j is at most k.

Hide Tags: Array, Hash Table

解题思路:

定义一个长度最大为k的滑动窗口,用一个set维护窗口内的数字判断是否出现重复,使用两个指针start和end标记滑动窗口的两端,

初始都是0,,然后end不断进行扩展,扫描元素判断是否出现重复元素,直到发现end-start>k, 就开始移动start,并且在set中移除对应的元素。

如果以为扫描到数组末尾还没有发现重复元素,那就可以返回false。

代码如下:

public static boolean contansNearbyDuplicate(int[] nums,int k){/* * 使用HashSet的原因是,它实现了Set接口,不允许存在重复的值 * 但Set集合中对象是不按特定顺序排序 * 所以,在使用前得先判断是否存在 */Set<Integer> hs=new HashSet<Integer>();if (nums.length==0||nums==null){return false;}int start=0,end=0;for (int i = 0; i < nums.length; i++){//如果HashSet中不包含该元素,添加进HashSet//并将结束指针向后移动一位if (!hs.contains(nums[i])){hs.add(nums[i]);end++;}//如果在K步范围内存在相同的元素,直接返回trueelse{return true;}//如果在K步范围外还不存在相同元素,则将前K个元素remove,两个指针继续向后滑动if (end-start>k){hs.remove(nums[start]);start++;}}return false;}

看了哪些风景,遇到哪些人。尽管同学说,

219 Contains Duplicate II(包含重复的数II)

相关文章:

你感兴趣的文章:

标签云: