【发布时间】:2019-03-12 10:01:52
【问题描述】:
这里是关于算法/解决方案的描述:
- 输入:一个整数数组和一个数组索引
- 输出:数组的第 K 个最大元素
- 将前 K 个元素读入辅助数组(迄今为止发现的最大 K 个)
- 对 K 元素数组进行排序
-
然后:
for each remaining element { if (if it is smaller than the smallest element of the aux. array) { throw it away } else { remove the current smallest element of the auxiliary array place the element into the correct position in the auxiliary array } } then return the smallest (the Kth) element of the auxiliary array
我想出了以下解决方案:
public int findElement() throws IndexingError {
int[] bigArray = getArray();
int k = getIndex();
if (k <= 0 || k > bigArray.length) {
throw new IndexingError();
}
int[] smallArray = Arrays.copyOfRange(bigArray,0,k-1);
Arrays.sort(smallArray);
for (int i = k; i < bigArray.length; i++) {
for (int ii = 1; ii < smallArray.length; ii++) {
smallArray[ii-1] = smallArray[ii];
if (bigArray[i] > smallArray[ii]) {
smallArray[ii] = bigArray[i];
System.out.println(smallArray[ii] + " " + smallArray[ii-1] + " " + bigArray[i]);
break;
}
}
}
return smallArray[0];
}
例如:
代码应返回值:8,基于以下信息:
array = [2, 3, 8, 7, 1, 6, 5, 9, 4, 0]
k = 2
运行上面的代码每次都会产生不同的输出,如果你运行足够多次你会得到正确的答案?
有人可以识别/修复我的代码中的缺陷吗?
【问题讨论】:
-
你把事情复杂化了,这不是一个非常困难的任务
-
我同意VIPER,您可以简单地对数组进行排序并获取第K个元素。
-
是的,我知道显而易见的解决方案是什么,但是我被要求专门这样做
-
即使您被限制使用第二个数组,您也必须将
k元素以排序方式放入其中。因此,您可以使用任何排序算法,但对其稍作更改以将元素放置在第二个数组中并将其限制为k元素。例如,冒泡排序仅查找第一个k元素并将元素或元素索引放入第二个数组
标签: java arrays sorting for-loop int