多數組K大數

題目描述

給定兩個有序數組arr1和arr2,在給定一個整數k,返回兩個數組的所有數中第K小的數。
例如:
arr1 = {1,2,3,4,5};
arr2 = {3,4,5};
K = 1;
因爲1爲所有數中最小的,所以返回1;

arr1 = {1,2,3};
arr2 = {3,4,5,6};
K = 4;
因爲3爲所有數中第4小的數,所以返回3;

要求:如果arr1的長度爲N,arr2的長度爲M,時間複雜度請達到O(log(min{M,N}))。

//多數組K大數
    public int findKthNum(int[] arr1, int[] arr2, int kth) {
        int len1 = arr1.length;
        int len2 = arr2.length;
        int k = 0;
        int i =0;
        int j =0;
        int result;
        while (i < len1 && j < len2) {
            if (arr1[i] < arr2[j]) {
                result = arr1[i];
                ++i;
            }else {
                result = arr2[j];
                ++j;
            }
            ++k;
            if (k == kth) {
                return result;
            }
        }
        while (i < len1) {
            ++k;
            if (k == kth) {
                return arr1[i];
            }
            ++i;
        }
        while (j < len2) {
            ++k;
            if (k == kth) {
                return arr2[j];
            }
            ++j;
        }
        return 0;
    }
發佈了508 篇原創文章 · 獲贊 23 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章