zoukankan      html  css  js  c++  java
  • LeetCode 4. Median of Two Sorted Arrays (分治)

    两个有序的数组 nums1 和 nums2 维数分别为m,n。找所有数的中位数,复杂度 O(log (m+n))

    注意:奇偶个数,分治法求解,递归出口特殊处理。取Kth smallest数时,分治取mid=k/2和k-mid,避免奇数造成影响。

     1 class Solution {
     2     double findKth(vector<int> num1,vector<int> num2, int k)
     3     {
     4         int m = num1.size(), n = num2.size();
     5         if(m > n)
     6             return findKth(num2,num1,k);
     7         if(m == 0)
     8             return num2[k-1];
     9         if(k == 1)
    10             return num1[0]>num2[0]?num2[0]:num1[0];
    11         int mid1=min(k/2,m), mid2=k-mid1;
    12         if(num1[mid1-1]>num2[mid2-1])
    13             return findKth(num1,vector<int>(num2.begin()+mid2,num2.end()),k-mid2);
    14         else if(num1[mid1-1]<num2[mid2-1])
    15             return findKth(vector<int>(num1.begin()+mid1,num1.end()),num2,k-mid1);
    16         else
    17             return num1[mid1-1];
    18 
    19     }
    20 
    21 public:
    22     double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    23         int m = nums1.size(), n = nums2.size();
    24         return (findKth(nums1, nums2, (m + n + 1) / 2) + findKth(nums1, nums2, (m + n + 2) / 2)) / 2.0;
    25     }
    26 };
  • 相关阅读:
    js的同步与异步
    单体应用SSM
    Spring 事务管理简介
    Linux
    Docker
    spring Cloud Netflix
    平台即服务
    MySQL InnoDB 索引组织表 & 主键作用
    Innodb Double Write
    Laravel 5.6: Specified key was too long error
  • 原文地址:https://www.cnblogs.com/demian/p/7642382.html
Copyright © 2011-2022 走看看