1. 程式人生 > 其它 >LeetCode刷題4:尋找兩個正序陣列的中位數

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

題目:

給定兩個大小分別為 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;
        }    

}