我正在尝试解决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;
}
}
答案 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()。