LeetCode 刷題筆記 - 4. 尋找兩個有序數組的中位數

難度:

困難算法

描述:

給定兩個大小爲mn的有序數組nums1nums2。 請你找出這兩個有序數組的中位數,而且要求算法的時間複雜度爲O(log(m + n))
你能夠假設nums1nums2不會同時爲空。swift

示例:

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

則中位數是 2.0
複製代碼
2:

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

則中位數是 (2 + 3)/2 = 2.5
複製代碼

來源:力扣(LeetCode) 連接:leetcode-cn.com/problems/me… 著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。數組


語言:

swiftbash

解析:

這題我以爲一點也不難,求兩個數組中位數,就先將兩個數組合並,再排序就好咯。
由於第三題用了遊標,因此這題順便也選了快速排序。
快排原理不贅述,直接上代碼。網絡

代碼以下:ui

class Solution {
    func sort(numbersArray: inout [Int], low: Int, high: Int) {
        if low >= high {
            return
        }
        var i = low, j = high
        let key = numbersArray[i]
    
        while i < j {
            while i < j && numbersArray[j] >= key {
                j -= 1
            }
            numbersArray[i] = numbersArray[j]
            while i < j && numbersArray[i] <= key {
                i += 1
            }
            numbersArray[j] = numbersArray[i]
        }
        numbersArray[i] = key
        sort(numbersArray: &numbersArray, low: low, high: i - 1)
        sort(numbersArray: &numbersArray, low: i + 1, high: high)
    }
    
    func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) -> Double {
        var numbersArray = nums1 + nums2
        sort(numbersArray: &numbersArray, low: 0, high: numbersArray.count - 1)
        let index = numbersArray.count / 2;
        if numbersArray.count % 2 == 0 {
            return Double((numbersArray[index] + numbersArray[index - 1])) / 2.0
        } else {
            return Double(numbersArray[index])
        }
    }
}
複製代碼

總結

複習了一遍快速排序和遞歸算法。spa

相關文章
相關標籤/搜索