相关疑难解决方法(0)

如何在两个排序数组的并集中找到第k个最小元素?

这是一个家庭作业问题.他们说,这需要O(logN + logM)地方NM是数组的长度.

让我们命名的数组ab.显然我们可以忽略所有a[i]b[i]i> k.
首先,让我们来比较一下a[k/2]b[k/2].让b[k/2]> a[k/2].因此我们也可以丢弃所有b[i],其中i> k/2.

现在我们拥有所有a[i],我<k和所有b[i],其中我<k/2找到答案.

你下一步怎么做?

arrays algorithm binary-search

100
推荐指数
4
解决办法
7万
查看次数

一种在两个大小为n的数组中找到第n个最大数的算法

我有这个问题:

给定大小为n的两个排序列表(存储在数组中),找到一个O(log n)算法,该算法计算两个列表的并集中的第n个最大元素.

我可以看到这里可能有一个技巧,因为它需要第n个最大的元素,并且数组的大小也是n,但我无法弄清楚它是什么.我以为我可以适应计数排序,那会有用吗?

language-agnostic algorithm

6
推荐指数
1
解决办法
4035
查看次数

从两个排序的数组中找到kthsmallest元素

我已经实现了一个工作功能.但它效率不高,因为它会在每次调用中复制一个新副本.我无法将其转换为仅使用a_start,a_end,b_start,b_end.我已经尝试了几种方法来转换它,但它们都没有适用于所有情况.我如何转换它,以便它接收数组a和b的开始和结束指针?我已经尝试了以下内容并修改了ki-1和kj-1,这样它只需要k,但是没有用.

int m = a_right-a_left, n=b_right-b_left;
int i = (a_left+a_right)/2;
or int i = (int)((m* (k-1)) / (m+n) ); 
Run Code Online (Sandbox Code Playgroud)

下面是我的工作代码,每次调用使用一个新的数组副本.

public static int kthSmallest(int[] a, int[] b,  int k) {
    if (a.length==0)
        return b[k-1];
    else if (b.length==0)
        return a[k-1];
    else if (b.length<a.length)
        return kthSmallest(b, a, k);

        // make sure i + j = k - 1
        int m = a.length, n=b.length;
        int i = (int)((double)m / (m+n) * (k-1));  // make sure i won't be out of bounds
        int j …
Run Code Online (Sandbox Code Playgroud)

arrays sorting algorithm

3
推荐指数
1
解决办法
3367
查看次数