【发布时间】:2019-02-05 09:27:12
【问题描述】:
我有一个算法问题。
例如,有一个int[] 数组,如[1,5,4,3,7,2]。
我想在这个数组中找到第 k 个最大的差异:
array[i] - array[j] = kth largest difference
(索引 i 必须小于 j 并且 array[i] 必须大于 array[j])。
输出是在这个问题中返回j。
我目前的想法:
- 我可以构建一个
int[][]来存储数组中的所有差异。 - 然后对它们进行排序,找到第 k 个最大的差异。
但是时间复杂度是O(n^2)。
有更好的解决方案吗?
【问题讨论】:
-
您可能希望为给定示例添加预期结果。
-
我对@987654331@的理解正确吗?
-
@dehasi No. ex: 对于
[8 ,4 ,1 ],第二大区别是8 - 4 = 4不是4 - 1 = 3 -
要找到两个元素之间的第 k 个最大元素,您需要始终迭代 n^2。不要认为有改进的余地
-
这里提供了一个 O(n*log(n)*log(n)) 解决方案来找到第 k 个最小差异geeksforgeeks.org/…。应该很容易适应第 k 个最大的。
标签: java arrays algorithm time