Java 为什么';查找重复项时我的代码错了吗?
我正试图解决这个Leetcode问题 我不知道为什么我的代码不正确。我一直在关注这个问题,并试图尽可能地把它写出来,但没有成功 有人能指出我做错了什么吗Java 为什么';查找重复项时我的代码错了吗?,java,algorithm,debugging,Java,Algorithm,Debugging,我正试图解决这个Leetcode问题 我不知道为什么我的代码不正确。我一直在关注这个问题,并试图尽可能地把它写出来,但没有成功 有人能指出我做错了什么吗 class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { boolean flag = false; int ans = 0; for(int i = 0; i < nums.lengt
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
boolean flag = false;
int ans = 0;
for(int i = 0; i < nums.length; i++) {
for(int j = i + 1; j < nums.length; j++) {
if(nums[i] == nums[j]) {
flag = true;
}
if(flag) {
ans = Math.abs(nums[i] - nums[j]);
}
if(ans <= k) {
return true;
}
}
}
return false;
}
}
类解决方案{
公共布尔值包含任意重复(int[]nums,int k){
布尔标志=假;
int ans=0;
对于(int i=0;iMath.abs(nums[i]-nums[j])
是问题所在
您正在检查这些数字的值是否为
您初始化intans=0;
让我们假设i=0;j=1;
nums[i]!=nums[j]///标志仍然==false。
然后你检查什么不起作用?你能更具体一点吗?描述实际和期望的行为。请提供一个输入示例并告诉我们你的代码失败的地方。i
和j
之间的区别,而不是这些指标之间的区别。重新阅读问题陈述。(顺便说一句,如果你再考虑一下,nums[i]-nums[j]
将始终为0)你永远不会重置flag
,因此一旦你找到两个相同的元素,如果后面有更多的元素,它很可能返回true。让我们以他们的最后一个例子{1,2,3,1,2,3}k=2:一旦达到i=0和j=1,标志将变为真,但因为指数差(如果计算正确)将大于k您将继续。最终您将处于i=1和j=2,即使值不同,您也会计算索引差,因为此时flag
仍然为真。您是否尝试过调试?您的方法还解决了另一个问题(flag
从不重置)但是你可能也要指出(当你在代码中时,也要删除代码中的标志和ans
)你在'if(Math.abs(i-j)@mooga谢谢!更新了哇,好吧,我知道我做错了什么,谢谢你!
public boolean containsNearbyDuplicate(int[] nums, int k) {
boolean flag = false;
int ans = 0;
for(int i = 0; i < nums.length; i++) {
for(int j = i + 1; j < nums.length; j++) {
if(nums[i] == nums[j]) {
if( Math.abs(i - j) <= k) return true;
}
}
}
return false;
}
if(ans != 0 && ans <= k) {
return true;
}