給定兩個(gè)有序列表,大小分別為m和n。給出一個(gè)算法,以O(shè)(logn+logm)時(shí)間找出兩個(gè)列表合并后的有序列表中第k小元素

題目

給定兩個(gè)有序列表,大小分別為m和n。給出一個(gè)算法,以O(shè)(logn+logm)時(shí)間找出兩個(gè)列表合并后的有序列表中第k小元素

算法思想

設(shè)兩個(gè)數(shù)組為A[1...m],B[1...n],則中間位置分別為m/2與n/2,假設(shè)A[m/2]>B[n/2],那么A[m/2...m]在A+B的n/2+m/2之后,此時(shí),若k<n/2+m/2,那么就可以排除A[m/2...m]的元素,在剩余元素再進(jìn)行上述操作,若k>n/2+m/2,那么就可以排除B[1...n/2]的元素,再剩余元素中尋找第k-n/2小項(xiàng)。

代碼:

#include <iostream>
#define MAXLEN 100
using namespace std;
int Search(int A[],int B[],int aLeft, int aRight, int bLeft, int bRight, int k)
{
    int aMiddle = (aLeft + aRight) / 2;
    int bMiddle = (bLeft + bRight) / 2;
    if (aLeft > aRight)
        return B[bLeft + k - 1];
    if (bLeft > bRight)
        return A[aLeft + k - 1];
    if (A[aMiddle] > B[bMiddle])
    {
        if (k <= (aMiddle - aLeft) + (bMiddle - bLeft) + 2)
            return Search(A, B, aLeft, aMiddle - 1, bLeft, bRight, k);
        else
            return Search(A, B,aLeft, aRight, bMiddle + 1, bRight, k - (bMiddle - bLeft) - 1);
    }
    else
    {
        if (k <= (aMiddle - aLeft) + (bMiddle - bLeft) + 2)
            return Search(A, B, aLeft, aRight, bLeft, bMiddle - 1, k);
        else
            return Search(A, B, aMiddle + 1, aRight, bLeft, bRight, k - (aMiddle - aLeft) - 1);
    }
}
int main(void)
{
    int alen, blen,k;
    int A[MAXLEN],B[MAXLEN];
    cin >> alen;
    for (int i = 0; i < alen; i++)
    {
        cin >> A[i];
    }
    cin >> blen;
    for (int i = 0; i < blen; i++)
    {
        cin >> B[i];
    }
    cin >> k;
    cout << "第" << k << "小元素是" << Search(A, B, 0, alen - 1, 0, blen - 1, k) << endl;
    system("pause");
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,581評論 0 13
  • 這個(gè)不錯(cuò)分享給大家,從扣上看到的,就轉(zhuǎn)過來了 《電腦專業(yè)英語》 file [fail] n. 文件;v. 保存文...
    麥子先生R閱讀 7,111評論 5 24
  • (十七) 這座八角形的建筑物,其實(shí)是一個(gè)虛擬的空間,它于公元2403年建成。高端科學(xué)技術(shù)研究室,是地球人科...
    文心妙運(yùn)閱讀 199評論 0 0
  • 文章首發(fā)notes.hudabai.com.未經(jīng)允許,禁止轉(zhuǎn)載! 第一次看到這句話是在msn的登錄界面(11年左右...
    我不乖還會惹麻煩閱讀 845評論 0 0
  • 今天社區(qū)服務(wù)將回訪單送回來了,而且給你稱重了,7.9斤,沒少長啊,心中高興,呦呦在變大,而且呦呦的消化也在變好,最...
    申玉磊閱讀 346評論 0 1

友情鏈接更多精彩內(nèi)容