LeetCode4:尋找兩個有序數組的中位數

題目鏈接
思路:
我最開始的思路是這樣的,獲取兩個數組的總長度,求得中位數(除2),如果總長度是奇數的話,那求得
的那個數就是兩個有序數組中的角標,如果總長度是偶數的話那就是當前角標加上前面的那個角標的值,所以我
們需要定義一個變量存儲前面的那個角標的數。
定義,i,j兩個變量遍歷兩個數組,如果有一個可以排序的話,那就把那個數組的數放進去,變量加一。當然
我們還需要判斷每個數組長度,防止異常。接下來 是我自己寫的,執行成功的,一次就成,而且複雜度也挺低的,
第一次。

public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int sumLength = nums1.length+nums2.length, index = sumLength/2,over = sumLength%2,pri = 0,cur = 0;
        for (int i = 0, j = 0,k = 0;k<sumLength;k++){
            // 判斷兩數組角標,獲取當前排序數
            if (i<nums1.length && j <nums2.length){
                if (nums1[i]>=nums2[j]){
                    cur = nums2[j++];
                }else {
                    cur = nums1[i++];
                }
            }else if (i >= nums1.length && j < nums2.length){
                cur = nums2[j++];
            }else {
                cur = nums1[i++];
            }
            // 先判斷當前數是不是中位數
            if (k == index){
                // 判斷奇數偶數,奇數直接返回當前數,偶數當前數同 tmp平均
                if (over>0){
                    return cur;
                }else {
                    return (pri+cur)/2.0;
                }
            }else {// 不是就把當前數存儲到pri裏面
                pri = cur;
            }

        }
        return 0;
    }
給大家看下效率。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章