LeetCode (4)尋找兩個正序陣列的中位數

2021-10-21 19:01:40 字數 1657 閱讀 8083

給定兩個大小分別為mn的正序(從小到大)陣列nums1nums2。請你找出並返回這兩個正序陣列的中位數

示例1:

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

輸出:2.00000

解釋:合併陣列 = [1,2,3] ,中位數 2

示例2:

輸入:nums1 = [1,2], nums2 = [3,4]

輸出:2.50000

解釋:合併陣列 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5

示例3:

輸入:nums1 = [0,0], nums2 = [0,0]

輸出:0.00000

示例4:

輸入:nums1 = , nums2 = [1]

輸出:1.00000

從兩個正序陣列中找出中位數,很明顯的會想到將兩個陣列進行合併,然後在合併後的正序陣列中找出中位數。中位數取決於兩個陣列的長度和,和為奇數直接取中間的數,和為偶數則取中間兩數的平均值。

源程式:

/*

問題:尋找兩個正序陣列的中位數

*/#include

#include

#include

using

namespace std;

class

solution

if(index2 == n)

if(k ==1)

// 正常情況

int newindex1 =

min(index1 + k /2-

1, m -1)

;int newindex2 =

min(index2 + k /2-

1, n -1)

;int pivot1 = nums1[newindex1]

;int pivot2 = nums2[newindex2];if

(pivot1 <= pivot2)

else}}

//尋找中位數的函式

double

findmediansortedarrays

(vector<

int>

& nums1, vector<

int>

& nums2)

else}}

;int

main

(int argc,

char

*ar**)

; vector<

int>nums2 =

; solution s;

double res = s.

findmediansortedarrays

(nums1,nums2)

; cout << res;

return0;

}

執行結果:

leetcode4 尋找兩個正序陣列的中位數

參考題解 題解 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示...

LeetCode 4 尋找兩個正序陣列的中位數

給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是2.0 示例 2 nums1...

LeetCode 4 尋找兩個正序陣列的中位數

原題目 思路 如果某乙個陣列的長度為零,直接返回另外乙個陣列的中位數,否則 用雙指標法將兩個陣列合併為乙個陣列 o n m 然後返回該陣列的中位數。class solution else if n 0 else int count 0,i 0,j 0 vectors n m while iwhile...