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

相关文章
相关标签/搜索