zoukankan      html  css  js  c++  java
  • LeetCode "Median of Two Sorted Arrays"

    1A! We get median of each array and compare them, then we know which half should be disguarded and how many should be disguarded.

    class Solution {
    public:
        double findMidArr(int A[], int s, int e, int &chopLen)
        {
            int len = e - s + 1;
            chopLen = (s + e) / 2 - s;
            if (len % 2)    return A[(s + e) / 2];
            else            return (A[(s + e) / 2] + A[(s + e) / 2 + 1]) / 2.0;
        }
        double findMidMinor(int sm[], int cntSm, int lg[], int cntLg)
        {
            vector<int> v;
            v.assign(lg, lg + cntLg);
            
            v.insert(v.end(), sm, sm + cntSm);
            std::sort(v.begin(), v.end());
    
            size_t len = v.size();
            if (len % 2)    return v[len / 2];
            else            return (v[len / 2] + v[len / 2 - 1]) / 2.0;
        }
        double findMid(int A[], int sa, int ea, int B[], int sb, int eb)
        {
            int lenA = ea - sa + 1;
            int lenB = eb - sb + 1;
    
            //    Base cases
            if (lenA <= 2)    return findMidMinor(A + sa, lenA, B + sb, lenB);
            if (lenB <= 2)    return findMidMinor(B + sb, lenB, A + sa, lenA);
    
            //    Chop
            int chopLenA, chopLenB;
            double midA = findMidArr(A, sa, ea, chopLenA);
            double midB = findMidArr(B, sb, eb, chopLenB);
            int chopLen = std::min(chopLenA, chopLenB);
    
            if (midA == midB) return midA;
            else if (midA < midB)    return findMid(A, sa + chopLen, ea, B, sb, eb - chopLen);
            else if (midB < midA)    return findMid(A, sa, ea - chopLen, B, sb + chopLen, eb);
        }
        double findMedianSortedArrays(int A[], int m, int B[], int n) {
            return findMid(A, 0, m - 1, B, 0, n - 1);
        }
    };
  • 相关阅读:
    面向过程, 面向对象, 类和对象, 类与数据类型
    python函数
    简单的登录注册函数
    Java遍历包中所有类
    spring boot jar启动
    过期算法
    负载均衡算法
    spring boot druid mybatis多数据源
    多线程wait和notify实现1212
    多线程售票
  • 原文地址:https://www.cnblogs.com/tonix/p/3926873.html
Copyright © 2011-2022 走看看