4. 兩個(gè)排序數(shù)組的中位數(shù)-LeetCode

給定兩個(gè)大小為 m 和 n 的有序數(shù)組 nums1 和 nums2 。

請(qǐng)找出這兩個(gè)有序數(shù)組的中位數(shù)。要求算法的時(shí)間復(fù)雜度為 O(log (m+n)) 。


示例 1:

nums1 = [1, 3]
nums2 = [2]

中位數(shù)是 2.0


示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

中位數(shù)是 (2 + 3)/2 = 2.5


思路:兩個(gè)數(shù)組已排序好,故將其合并為一個(gè)數(shù)組,再按中位數(shù)的數(shù)學(xué)定義得出答案


解決代碼:

 public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int nums1_len=nums1.length;
        int nums2_len=nums2.length;
        //返回的結(jié)果result
        double result=0;
        int [] nums=new int[nums1_len+nums2_len];
        int i=0,j=0,k=0;
        //往數(shù)組按元素大小插入
        while(i<nums1_len && j<nums2_len) {
            if(nums1[i]<nums2[j]) {
                nums[k++]=nums1[i++];
            }else {
                nums[k++]=nums2[j++];
            }
        }
        //如果num2的元素未完全插入且num1已插入完全
        while(i==nums1_len && j<nums2_len) {
            nums[k++]=nums2[j++];
        }
        //如果num1的元素未完全插入且num2已插入完全
        while(i<nums1_len && j==nums2_len) {
            nums[k++]=nums1[i++];
        }
        //判斷nums元素個(gè)數(shù)
        if(nums.length%2==0) {
            //偶數(shù):  [nums(len/2-1)+nums[(len/2)]/2
            result=(double)(nums[nums.length/2-1]+nums[nums.length/2])/2;
        }else {
            //奇數(shù):  [nums(len/2-1)/2]
            result=(double)nums[(nums.length-1)/2];
        }
        return result;
    }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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