程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode Median of Two Sorted Arrays

LeetCode Median of Two Sorted Arrays

編輯:C++入門知識

LeetCode Median of Two Sorted Arrays


There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

Show Tags




題意:求兩個有序數組的組成一個新的數組的中位數

思路:題目轉換為求第k大的數,如果總個數是奇數的話,就是求第中間的數了,如果是偶數的話,就是找到兩個中間的,求平均數。

求第k大的數:首先假設我們求的是兩個數組A和B中第k個數,為了我們每次都能折半查找,我們比較A[k/2]和B[k/2]這兩個數,如果A[k/2-1]

class Solution {
public:
    double findMedianSortedArrays(int A[], int m, int B[], int n) {
        int size = m + n;
        int k = (m + n + 1) / 2;
        if (size & 1)
            return findKth(A, m, B, n, k);
        else return (findKth(A, m, B, n, k) + findKth(A, m, B, n, k+1)) / 2;
    }
    
    double findKth(int A[], int m, int B[], int n, int k) {
        if (m > n)
            return findKth(B, n, A, m, k);
        if (m == 0)
            return B[k - 1];
        if (k == 1)
            return A[0] < B[0] ? A[0] : B[0];
        
        int index = k / 2;  
        int left = index < m ? index : m;  
        int right = k - left;  
          
        if (A[left - 1] < B[right - 1])     
           return findKth(A + left, m - left, B, n, right);  
        else if (A[left - 1] > B[right - 1])  
           return findKth(A, m, B + right, n - right, left);  
        else return A[left - 1];  
    }
};


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved