LeetCode刷題4:尋找兩個正序陣列的中位數
阿新 • • 發佈:2022-03-23
題目:
給定兩個大小分別為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的 中位數 。
演算法的時間複雜度應該為 O(log (m+n)) 。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
第一步:解題思路
方法一:二分查詢
中位數位於陣列的的中間位置
奇數、偶數
我們使用一條紅色分割線把兩個陣列分別分割成兩部分:
1. 紅線左邊和右邊的元素個數相等,或者左邊的元素的個數比右邊元素的個數多1個;
2. 紅線左邊的所有元素的數值 <= 紅線右邊的所有元素的數值;
public class Solustion(){ public double findMedianSortedArrays(int[] nums1, int[] nums2){ if(nums1.length > nums2.length){ int[] temp = nums1; nums1 = nums2; nums2 = temp; } int m = nums1.length; int n = nums2.length; // 分割線左邊的所有元素需要滿足的個數 m + (n - m +1) / 2 int totalLeft = (m + n + 1)/2; // 在 nums1 的區間 [0, m] 裡查詢恰當的分割線 // 使得 nums1[i - 1] <= nums2[j] && nums2[j - 1] <= nums1[i] int left = 0; int right = m; while( left < right){ int i = left + (right - left) / 2; } }