arrays - 两个数组所有可能乘积中的第 k 个最大元素

标签 arrays algorithm

给定两个数组 AB,每个数组的大小都是 N 如何找到其中的第 K 大元素集合 X = {i x j | i ∈ A 和 j ∈ B}?

我提出了 O(N^2 log(n)) 解决方案,方法是形成集合 X,对其进行排序,然后在 K< 处找到元素 从最后一个位置。有没有更好的复杂度更低的解决方案?

最佳答案

给定一个候选编号,您可以使用 A 和 B 的排序表示中的两个指针在时间 O(N) 中检查它在集合 {i x j | i ∈ A 和 j ∈ B}。因此,一种可能的解决方案是对 i x j 的值使用二进制搜索,运行时间为 O(N * (log N + log U)),其中 U 是从中提取 A 和 B 的宇宙的大小。

关于arrays - 两个数组所有可能乘积中的第 k 个最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45126635/

相关文章:

javascript - Eloquent Javascript 第 5 章练习题,使用 !array.some

r - 设置种子对算法的影响

c++ - 如何将多个 C++ vector 约束为相同大小?

javascript - 交换数组中除 first 和 last 之外的所有元素

c++ - 使用 vector 对比使用 vector 对更有效吗?

algorithm - 两个顶点之间的最小成本的不同行走的数量

algorithm - 组建躲避球队

python - 在Python中求解三变量丢番图方程

java - Java中将Json数组 "[{}]"转换为 "[]"

javascript - 为另一个函数保留 JQuery 变量(全局变量?)