找出n个有序数组中第K小的数。怎么写算法啊?各位帮帮忙!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找出n个有序数组中第K小的数。怎么写算法啊?各位帮帮忙!相关的知识,希望对你有一定的参考价值。

参考技术A 如果为升序列,直接取第k个元素,如果为降序列,直接取第n-k个元素就可以了追问

在吗

是几个有序的数组

从小到大排序的

是有几个集合,找出几个集合中第K小的数

追答

那将所有集合有序合并,然后找出来

追问

这样效率很低吧

能写一下具体的算法吗,什么语言都行

追答

不会呀,有序列表合并时间复杂度为线性的,你确定手机能把代码全打出来?输入不太可能啊

参考技术B 先确定是正序还是逆序,然后找第k 个数行吗? 参考技术C 不懂你问的啥。。

找轮转后的有序数组中第K小的数

我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数。
此处假设数组中没有相同的数,原排列顺序是递增排列。
在轮转后的有序数组中查找最小数的算法如下:

int findIndexOfMin(int num[],int n) {
        int l = 0;
        int r = n-1;
        while(l <= r) {
            int mid = l + (r - l) / 2;
            if (num[mid] > num[r]) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return l;
    }

接着基于此结果进行偏移,再基于数组长度对偏移后的值取模,就可以找到第K个数在数组中的位置了:

int findKthElement(int num[], int m, int k)
{
    if (k > m) return -1;
    int base = findIndexOfMin(num, 0, m-1);
    int index = (base+k-1) % m;
    return index;
}

以上是关于找出n个有序数组中第K小的数。怎么写算法啊?各位帮帮忙!的主要内容,如果未能解决你的问题,请参考以下文章

选择N个数据中第K小的数据输出

两个有序数组,找第k小的数//未完

9.27 在两个排序数组中找到第K小的数

数据结构与算法之深入解析“乘法表中第K小的数”的求解思路与算法示例

数据结构与算法之深入解析“乘法表中第K小的数”的求解思路与算法示例

2020-03-02:在无序数组中,如何求第K小的数?