java—理解一个编码在数组中查找第一个重复值时很有挑战性

jhkqcmku  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(219)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我目前正在练习我的编码技能,我遇到的挑战之一是找到数组中产生的第一个重复值。我已经解决了这个挑战,但没有及时解决。我看了这个问题的解决方案,遇到了这个解决方案,希望能帮助我理解它到底是如何工作的。我已经在我理解的区域中对解决方案进行了注解,以及该代码块的具体用途,但是我想帮助您理解if语句为什么它是这样工作的。

  1. int firstDuplicate(int[] a) {
  2. for(int i=0;i<a.length;i++)
  3. //Checks ???????????
  4. if(a[Math.abs(a[i])-1]<0)
  5. return Math.abs(a[i]);
  6. //Make the checked value negative
  7. else{
  8. a[Math.abs(a[i])-1]=-a[Math.abs(a[i])-1];
  9. }
  10. //If there are no duplicates it returns -1
  11. return -1;
  12. }

约束条件:

  1. 1 a.length 105,
  2. 1 a[i] a.length.
u3r8eeie

u3r8eeie1#

欢迎来到so。我不会给你确切的答案,而是为你提供工具,让你弄清楚。
为了让您理解这段代码,您需要调试它。这里有一些方法你可以去做。
在调用函数之前设置一个断点(查看ide的实现方法),然后逐行进入代码。
可以使用临时变量和 System.out.println() 声明。查看代码,将其分解为可跟踪的模块位。例如,您可以在 if 声明为

  1. int currentElementAbsolute = Math.abs(a[i]);
  2. System.out.println(currentElementAbsolute);
  3. int difference = currentElementAbsolute - 1;
  4. System.out.println(difference);
  5. int element = a[difference]
  6. System.out.println(element);
  7. if (element < 0)
  8. {
  9. return Math.abs(a[i]);
  10. }

如您所见,对于每个操作/行,我打印出当前值,从而跟踪事件。练习这个并重新写下 else 零件
注:完成后,你会意识到这种方法无法捕捉到所有的重复时,某些类型的数字是使用。狩猎快乐:)

展开查看全部

相关问题