• 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)).

    分析:题目要求复杂度为对数型,可以借鉴二分法,每次删掉不符合条件的一半。

    默认nums1.size() <= nums2.size(),若相反,则调换位置(line9)。找到nums1的分割点mid1,nums2的分割点mid2。

    如果nums1[mid1-1] < nums2[mid2-1],表示median number肯定在nums1[mid]~nums1[nums1.size()-1] + nums2[0] ~ nums2[mid2-1]之间,那么可以删掉nums1[0]~nums1[mid1-1]区间内的数字。

    同理,若nums1[mid1-1] > nums2[mid2-1],那么可以删掉nums2[0]~nums2[mid2-1]之间的数字。

    要特别注意的是不要用题目中所给的引用类形参!!

    运行时间为81ms。

     1 class Solution {
     2 public:
     3     double findMedianSortedArrays(vector<int> nums1, vector<int> nums2) {
     4         int len = nums1.size() + nums2.size();
     5         if(len & 0x1) return find(nums1, nums2, len / 2 + 1);
     6         else return (find(nums1, nums2, len / 2) + find(nums1, nums2, len / 2 + 1)) / 2;
     7     }
     8     double find(vector<int> nums1, vector<int> nums2, int k){
     9         if(nums1.size() > nums2.size()) return find(nums2, nums1, k);
    10         if(nums1.size() == 0) return nums2[k-1];
    11         if(k == 1) return min(nums1[0], nums2[0]);
    12         
    13         //compute the partition part of each vector
    14         int mid1 = k / 2 < nums1.size() ? k / 2 : nums1.size(), mid2 = k - mid1;
    15         vector<int>::iterator ite;
    16         if(nums1[mid1-1] < nums2[mid2-1]){
    17             ite = nums1.begin();
    18             for(int i = 0; i < mid1; i++) ite++;
    19             nums1.assign(ite, nums1.end());
    20             return find(nums1, nums2, k - mid1);
    21         }
    22         else if(nums1[mid1-1] > nums2[mid2-1]){
    23             ite = nums2.begin();
    24             for(int j = 0; j < mid2; j++) ite++;
    25             nums2.assign(ite, nums2.end());
    26             return find(nums1, nums2, k - mid2);
    27         }
    28         else return nums1[mid1-1];
    29     }
    30 };
  • 相关阅读:
    转载阿里开源的分布式事务框架 Seata
    查看进程上的线程数量
    chmod命令
    查找端口与查找正在运行的进程
    可输入的文本框
    js 类和对象
    js 三维数组
    ajax
    ORACLE数据库主要的系统表和数据字典视图
    url 传参
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4492812.html
Copyright © 2020-2023  润新知