题目:如下图;只要找到当前位置后的k个元素中有元素等于当前元素即可。
双层遍历解法
实现逻辑
双层遍历,每次遍历都将当前位置i的元素,于(i+1)到(i+k)元素进行比较如果相等,则返回true;
注意:i后元素遍历时,要保证不越界;
源码
//当数组为空,或者数组无元素,指定间隔距离为0
if(a==null||a.length==0||k==0){
return false;
}
for(int i = 0;i<a.length;i++){
//遍历当前位置后K个元素
for(int j=1;j<=k;j++){
//保证元素位置不越界,以及判断元素值相等
if(i+j<a.length&&a[i]==a[i+j]){
return true;
}
}
}
return false;
ArrayList解法
实现逻辑
只进行一层遍历,利用ArrayList存储元素,每次只存储K个元素,使用contains()方法校验在ArrayList是否有这个元素,有则返回true;当元素数量超过K个时,移除第一个元素,保证只在K的间隔里有重复元素。
源码
//当数组为空,或者数组无元素,指定间隔距离为0
if(a==null||a.length==0||k==0){
return false;
}
List<Integer> arr = new ArrayList<>();
for(int i = 0;i<a.length;i++){
//校验List是否包含该元素
if(arr.contains(a[i])){
return true;
}
arr.add(a[i]);
//保证List的长度不超过K
if(arr.size()>k){
arr.remove(0);
}
}
return false;