查找重复项时为什么我的代码错误?

时间:2019-04-16 13:28:47

标签: java algorithm debugging

我正在尝试解决Leetcode问题https://leetcode.com/problems/contains-duplicate-ii/

我不确定为什么我的代码不正确。我已经解决了这个问题,并试图尽我所能将其写出,但是那没有用。

有人可以指出我做错了吗?

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

2 个答案:

答案 0 :(得分:1)

Math.abs(nums[i] - nums[j])是问题

您要检查数字的值是否为<= k,而应该检查索引。

执行以下操作:

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

答案 1 :(得分:1)

您初始化int ans = 0; 让我们假装i = 0; j = 1; nums[i] != nums[j] /// flag still == false.

然后检查ans <= k。 并且ans仍然为0-会降低该键。

您应该在此处添加额外的支票:

 if(ans != 0 && ans <= k) {
     return true;
 }

此外,您在数字上而不是在索引上调用Math.abs()。