题目:如下图;只要找到当前位置后的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;
博客围绕查找当前位置后k个元素中是否有与当前元素相等的问题,介绍了两种Java算法解法。一是双层遍历解法,将当前位置元素与后续k个元素比较;二是ArrayList解法,单层遍历,用ArrayList存储元素并校验是否重复,超K个时移除首元素。
524

被折叠的 条评论
为什么被折叠?



