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

2021-10-10 06:53:38 字數 1063 閱讀 1484

方法一:暴力求解

1.合併陣列  2.進行排序找到中位數

由於未利用陣列自身有序的條件,時間複雜度高,用快排也需要

方法二:合併兩個有序陣列

1.利用歸併排序關鍵步驟合併兩個有序陣列,找到中位數

時間複雜度:

方法三:二分查詢

1.利用二分查詢用一條分割線把兩個陣列分成左右兩部分。

分割要求:(1)左右數量相等或者左邊多乙個(奇數情況)

(2)左邊的元素小於右邊的元素

2.整體偶數個:找到左邊部分最大的,和右邊部分最小的,求和除以2(實際除以2.0)

整體奇數個:找到左邊部分最大的

時間複雜度:

思路:把較短的陣列作為查詢的陣列,i=(left+right)/2;

其中i是nums1陣列分割線右邊的下標,同時是該陣列分割線左邊元素數量,對應下圖15的下標。

由於左右數量相等或差一,我們可以用總數量+1除以2減去i就是nums2陣列分割線左邊的數量,

也就是j的值。

對nums1[i-1]和nums2[j]進行比較,小於等於則在[i+1,m]之間找,大於在[0,j-1]之間找,

直到left>right跳出while迴圈。

left=0;right=m;//right初始為nums1的長度

while(left<=right)

else

}return (m+n)%2==0?(median1+median2)/2.0:median1;//都是int型別需要除2.0}};

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...