java程序通过求反查找重复值解决方案错误java.lang.ArrayIndexOutOfBoundsException:-3
请提供有关此代码错误的帮助 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:-3 在FindDuplicate.firstDuplicate(File.java:9) 位于FindDuplicate.main(File.java:19)java程序通过求反查找重复值解决方案错误java.lang.ArrayIndexOutOfBoundsException:-3,java,Java,请提供有关此代码错误的帮助 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:-3 在FindDuplicate.firstDuplicate(File.java:9) 位于FindDuplicate.main(File.java:19) 类查找重复{ 公共静态int firstDuplicate(int[]a){ int n=a.长度; 对于(int i=0;i
类查找重复{
公共静态int firstDuplicate(int[]a){
int n=a.长度;
对于(int i=0;i
试着解决这个问题
注意:写一个时间复杂度为O(n)且空间复杂度为O(1)的解决方案,因为这是在真实面试中要求你做的事情
给定仅包含1到a.length范围内的数字的数组a,查找第二个匹配项具有最小索引的第一个重复数字。换句话说,如果有多个重复的数字,则返回第二个数字的索引小于第二个数字的索引的数字。如果没有这样的元素,则返回-1。
或者取数组元素0到4
或者更改循环的内部逻辑:在数组索引中减少1
例如,
a[a[I]-1]=…
像这样Hi@SanDeep Rawat,我是begin code,请为我添加详细的解决方案作为代码您在这个程序中实际要做什么?我试图解决这个问题注:编写一个时间复杂度为O(n)且空间复杂度为O(1)的解决方案,因为在真正的面试中,你会被要求这样做。给定仅包含1到a.length范围内的数字的数组a,查找第二个匹配项具有最小索引的第一个重复数字。换句话说,如果有多个重复的数字,则返回第二个数字的索引小于第二个数字的索引的数字。如果没有这样的元素,则返回-1。检查它,只需更正If-else部分。如果(a[Math.abs(a[i])-1]<0{return Math.abs(a[i])else{a[Math.abs(a[i])-1]=-a[Math.abs(a[i])-1];}
class FindDuplicate {
public static int firstDuplicate(int[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
if (a[Math.abs(a[i])] < 0)
return Math.abs(a[i]);
else
a[a[i]] = -a[a[i]];
}
return -1;
}
/* Driver program to test the above function */
public static void main(String[] args) {
int[] arr = {
2,
4,
3,
5,
1
};
System.out.println(firstDuplicate(arr));
}
}