zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    ios逆向工程-内部钩子(Method Swizzling)
    ios逆向工程-动态分析
    ios逆向工程-静态分析
    Android Hook神器:XPosed入门与登陆劫持演示
    Android HOOK工具Cydia Substrate使用详解
    Android Hook框架Xposed详解
    Android Hook 框架 Cydia_substrate 详解
    Android上玩玩Hook:Cydia Substrate实战
    iOS8扩展插件开发配置 [转载]
    SQL触发器调用.NET的类方法
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4492812.html
Copyright © 2011-2022 走看看