• 【LeetCode】4. 寻找两个有序数组的中位数


    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2

    请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

    你可以假设 nums1 和 nums2 不会同时为空。

    示例 1:

    nums1 = [1, 3]
    nums2 = [2]
    
    则中位数是 2.0
    

    示例 2:

    nums1 = [1, 2]
    nums2 = [3, 4]
    
    则中位数是 (2 + 3)/2 = 2.5


    分析:给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 log 级别。回顾下中位数,对于一个有序数组,如果数组长度是奇数,那么中位数就是中间那个值,如果长度是偶数,就是中间两个数的平均数。

    二分查找:两个指针扫一下,每次选小的,找到第mid个,就是中位数。

    class Solution {
    public:
        double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
            int length1 = nums1.size();
            int length2 = nums2.size();
            int mid = (length1+length2)/2;
            int s = 0;
            int l = 0;
            int r = 0;
            int now = 0;
            int pre = 0;
            while(s<=mid && l<length1 && r<length2){
                pre = now;
                if(nums1[l]<nums2[r]){
                    now = nums1[l];
                    l++;
                }else{
                    now = nums2[r];
                    r++;
                }
                s++;
            }
            while(s<=mid && l<length1){
                pre = now;
                now = nums1[l];
                l++;
                s++;
            }
             while(s<=mid && r<length2){
                pre = now;
                now = nums2[r];
                r++;
                s++;
            }
            if((length1+length2)!=mid*2){
                return now;
            }else{
                return 1.0*(now+pre)/2;
            }
        }
    };
    View Code
  • 相关阅读:
    H5 使用 jssdk 出现的问题 错误码:63002 签名错误
    vue 使用 scss
    JS之常用字符串处理类
    hive数仓中两个维度表如果想合并纬度产生新自增ID方法
    叉乘,判线段相交,凸包
    二分查找
    大整数运算
    判定最小生成树是否唯一
    Prim算法
    Boruvka算法
  • 原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/10125374.html
Copyright © 2020-2023  润新知