zoukankan      html  css  js  c++  java
  • leecode第四题(寻找两个有序数组的中位数)

     题解:

    class Solution {
    public:
        double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
            int m = nums1.size();
            int n = nums2.size();
            if (m > n) return findMedianSortedArrays(nums2, nums1);//保证nums1个数少于nums2
            int iMin = 0, iMax = m, halfLen = (m + n + 1) / 2;
            while (iMin <= iMax) {
                int i = (iMin + iMax) / 2;
                int j = halfLen - i;//保证左右部分数目一样多
                if (i < iMax && nums2[j - 1] > nums1[i]) {
                    iMin = i + 1; // i is too small
                }
                else if (i > iMin && nums1[i - 1] > nums2[j]) {
                    iMax = i - 1; // i is too big
                }
                else { // i is perfect,这里满足左部分最大点小于等于右部分最小点
                    int maxLeft = 0;
                    if (i == 0) { maxLeft = nums2[j - 1]; }
                    else if (j == 0) { maxLeft = nums1[i - 1]; }
                    else { maxLeft = max(nums1[i - 1], nums2[j - 1]); }//这些都是极值情况,放在最后输出处理即可
                    if ((m + n) % 2 == 1) { return maxLeft; }
    
                    int minRight = 0;
                    if (i == m) { minRight = nums2[j]; }
                    else if (j == n) { minRight = nums1[i]; }
                    else { minRight = min(nums2[j], nums1[i]); }
    
                    return (maxLeft + minRight) / 2.0;//偶数个的中位数
                }
            }
            return 0.0;
        }
    };

    总结:

    我很惭愧,这个题写了三个多小时都没做出来,我一开始看到时间复杂度,想到二分法,然后不停判断并删除两个数组中大于中位数的值,然后稳定条件是两个数组剩余个数是m+n的一半,程序就是有问题。。。

    总得来说还是没有洞悉最有价值的规律,分析情况又把我绕迷糊了,唉,学习到了。

  • 相关阅读:
    关于tinymce编辑器插件重新初始化问题
    16进制=>rebg(包含透明度的转换处理)
    在vue项目中所有地方拿到当前项目的vue实例
    vue-draggable两种情况下的demo
    Docker管理工具之portainer
    SpringBoot集成Elasticsearch
    ElasticSearch添加索引
    Docker安装ElasticSearch
    RabbitMQ学习总结(2)-API的使用
    Docker安装RabbitMQ
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10571544.html
Copyright © 2011-2022 走看看