zoukankan      html  css  js  c++  java
  • 19.1.19 [LeetCode4]Median of Two Sorted Arrays

    There are two sorted arrays nums1 and nums2 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)).

    You may assume nums1 and nums2 cannot be both empty.

    Example 1:

    nums1 = [1, 3]
    nums2 = [2]
    
    The median is 2.0
    

    Example 2:

    nums1 = [1, 2]
    nums2 = [3, 4]
    
    The median is (2 + 3)/2 = 2.5
     1 class Solution {
     2 public:
     3     double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
     4         int m = nums1.size(), n = nums2.size();
     5         int idx1 = (m + n + 1) / 2, idx2 = (m + n + 2) / 2;
     6         return (findkth(nums1, 0, nums2, 0, idx1) + findkth(nums1, 0, nums2, 0, idx2)) / 2.0;
     7     }
     8     int findkth(vector<int>&nums1, int i, vector<int>&nums2, int j, int k) {
     9         if (i >= nums1.size())return nums2[j + k - 1];
    10         if (j >= nums2.size())return nums1[i + k - 1];
    11         if (k == 1)return min(nums1[i], nums2[j]);
    12         int midval1 = (i + k / 2 <= nums1.size()) ? nums1[i + k / 2 - 1] : 9999999;
    13         int midval2 = (j + k / 2 <= nums2.size()) ? nums2[j + k / 2 - 1] : 9999999;
    14         if (midval1 < midval2)
    15             return findkth(nums1, i + k / 2, nums2, j, k - k / 2);
    16         return findkth(nums1, i, nums2, j + k / 2, k - k / 2);
    17     }
    18 };
    View Code

    有几个点:

    1.求中位数是求整个数组的第 (m+n+1)/2 和 (m+n+2)/2 个数的平均值

    2.使用奇妙的递归二分查找两个数组中的第k大数

    3.注意数组边界判断

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    分析WordPress数据表之用户表(功能篇)
    Android.mk简介:
    win10 mars xlog编译
    sudo apt-get install libstdc++6
    WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建
    Mars Android 接入指南
    Mars Sample 使用说明
    RxJava2 方法总结
    mqtt client api: 阻塞API
    idea使用git进行项目管理
  • 原文地址:https://www.cnblogs.com/yalphait/p/10291218.html
Copyright © 2011-2022 走看看