【練習題】求第k小數(有序雙數組)

題目:

兩個升序等長數組num1num2,找出兩個數組中所有元素裏的第小的數,兩個數組長度均爲n,且n >= k >= 1,寫出find_kth_number返回第k小的數組

思路一:歸併優化O(k)

使用歸併排序的合併方法:
步驟
1、兩個指針p1,p2分別指向num1num2的頭
2、若num1[p1] <= num2[p2]; p1++;反之,p2++
3、while循環k - 1次,跳出循環的p1p2所指數中誰小誰爲所求

【注意】 要考慮到超界問題(當p1p2走到空的情況)

int find_kth_number(int *num1, int *num2, int n, int k) {
    
}

代碼演示

int find_kth_number(int *num1, int *num2, int n, int k) {
	//雙指針
    int p1 = 0, p2 = 0;
    while (--k) {
        //注意判斷指針所指是否合法
        if (p1 < n && num1[p1] <= num2[p2]) ++p1;
        else ++p2;
    } 
    //指針超界操作
    if (p1 >= n) return num2[p2];
    if (p2 >= n) return num1[p1];
    return num1[p1] <= num2[p2] ? num1[p1] : num2[p2];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章