Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在宽范围的整数数组中查找第一个重复元素?_Java_C_Arrays_Algorithm_Data Structures - Fatal编程技术网

Java 在宽范围的整数数组中查找第一个重复元素?

Java 在宽范围的整数数组中查找第一个重复元素?,java,c,arrays,algorithm,data-structures,Java,C,Arrays,Algorithm,Data Structures,这个问题与哪个输入是字符数组有关,我们可以采用256大小的散列 但是如果 数组中的元素是大范围的整数,散列的开销可能非常大 数组包含异构元素、整数或字符,那么散列如何解决这个问题呢 我们可以使用蛮力方法扫描每个元素的整个数组,但在最坏的情况下需要O(n²) 还有其他想法吗?离线版本:按如下方式对向量排序: vector<std::pair<int,int> > data; for (int i=0;i<orignalVec.size();++i) dat

这个问题与哪个输入是字符数组有关,我们可以采用256大小的散列

但是如果

  • 数组中的元素是大范围的整数,散列的开销可能非常大

  • 数组包含异构元素、整数或字符,那么散列如何解决这个问题呢

我们可以使用蛮力方法扫描每个元素的整个数组,但在最坏的情况下需要O(n²)


还有其他想法吗?

离线版本:按如下方式对向量排序:

vector<std::pair<int,int> > data;
for (int i=0;i<orignalVec.size();++i)
    data.push_back( make_pair(originalVec[i] , i ) );
矢量数据;

对于(int i=0;i首先按升序或降序对数组进行排序。然后从第二个元素开始循环排序的数组,并将每个元素与前一个元素进行比较,以查看它们是否匹配

int[] numbers = {1, 5, 23, 2, 1, 6, 3, 1, 8, 12, 3};
Arrays.sort(numbers);

for (int i = 1; i < numbers.length; i++) {
    if (numbers[i - 1] == numbers[i]) {
        System.out.println("Repeated numbers are : " + numbers[i]);
    }
}
int[]数字={1,5,23,2,1,6,3,1,8,12,3};
数组。排序(数字);
对于(int i=1;i
@MatthewD可能不起作用。它返回重复的元素,但可能不是第一个。您必须复制数组,以便遍历它以识别第一个重复的元素。但您不想使用任何“外部”数组…参考Java实现实际上,您的解决方案似乎是正确的,因为您考虑的是最小的位置值e表示重复的元素。因为我不知道向量的事情,我不明白。你能用算法或伪代码来解释一下吗。谢谢你的建议。@PrakharBansal
std::vector
只是一个可变长度的数组。最好是添加一些注释,而不是把代码扔出去。