Java 为什么';查找重复项时我的代码错了吗?

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

我正试图解决这个Leetcode问题

我不知道为什么我的代码不正确。我一直在关注这个问题,并试图尽可能地把它写出来,但没有成功

有人能指出我做错了什么吗

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;
 }