**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
我目前正在练习我的编码技能,我遇到的挑战之一是找到数组中产生的第一个重复值。我已经解决了这个挑战,但没有及时解决。我看了这个问题的解决方案,遇到了这个解决方案,希望能帮助我理解它到底是如何工作的。我已经在我理解的区域中对解决方案进行了注解,以及该代码块的具体用途,但是我想帮助您理解if语句为什么它是这样工作的。
int firstDuplicate(int[] a) {
for(int i=0;i<a.length;i++)
//Checks ???????????
if(a[Math.abs(a[i])-1]<0)
return Math.abs(a[i]);
//Make the checked value negative
else{
a[Math.abs(a[i])-1]=-a[Math.abs(a[i])-1];
}
//If there are no duplicates it returns -1
return -1;
}
约束条件:
1 ≤ a.length ≤ 105,
1 ≤ a[i] ≤ a.length.
1条答案
按热度按时间u3r8eeie1#
欢迎来到so。我不会给你确切的答案,而是为你提供工具,让你弄清楚。
为了让您理解这段代码,您需要调试它。这里有一些方法你可以去做。
在调用函数之前设置一个断点(查看ide的实现方法),然后逐行进入代码。
可以使用临时变量和
System.out.println()
声明。查看代码,将其分解为可跟踪的模块位。例如,您可以在if
声明为如您所见,对于每个操作/行,我打印出当前值,从而跟踪事件。练习这个并重新写下
else
零件注:完成后,你会意识到这种方法无法捕捉到所有的重复时,某些类型的数字是使用。狩猎快乐:)