当前位置: 首页 > wzjs >正文

企网站建设深圳网站. 方维网络

企网站建设,深圳网站. 方维网络,wordpress 环保公益主题,用前端做的比较酷的网站题目要求在两个有序数组中找到中位数。由于时间复杂度要求为 O(log(mn)),因此不能简单地将两个数组合并后再找中位数,而是需要用二分查找的思路来解决。 解决思路:二分查找 将问题转化为在两个有序数组中寻找第 k小的数,其中 k 是…

题目要求在两个有序数组中找到中位数。由于时间复杂度要求为 O(log(m+n)),因此不能简单地将两个数组合并后再找中位数,而是需要用二分查找的思路来解决。

解决思路:二分查找
将问题转化为在两个有序数组中寻找第 k小的数,其中 k 是中位数的位置。

具体步骤:
1. 如果两个数组的总长度是偶数,则中位数是第 k小和第 k+1小的数的平均值。
2. 如果总长度是奇数,则中位数是第 k_小的数。
3. 通过二分查找,每次排除一半的元素,逐步缩小查找范围。

代码实现

#include <algorithm>
#include <climits>

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int m = nums1.size();
        int n = nums2.size();
        int total = m + n;

        if (total % 2 == 1) {
            // 总长度为奇数,返回第 k 小的数
            return findKthElement(nums1, nums2, total / 2 + 1);
        } else {
            // 总长度为偶数,返回第 k 小和第 k+1 小的数的平均值
            double left = findKthElement(nums1, nums2, total / 2);
            double right = findKthElement(nums1, nums2, total / 2 + 1);
            return (left + right) / 2.0;
        }
    }

private:
    // 寻找第 k 小的元素
    int findKthElement(vector<int>& nums1, vector<int>& nums2, int k) {
        int m = nums1.size();
        int n = nums2.size();
        int index1 = 0, index2 = 0;

        while (true) {
            // 边界情况
            if (index1 == m) {
                return nums2[index2 + k - 1];
            }
            if (index2 == n) {
                return nums1[index1 + k - 1];
            }
            if (k == 1) {
                return min(nums1[index1], nums2[index2]);
            }

            // 正常情况
            int newIndex1 = min(index1 + k / 2 - 1, m - 1);
            int newIndex2 = min(index2 + k / 2 - 1, n - 1);
            int pivot1 = nums1[newIndex1];
            int pivot2 = nums2[newIndex2];

            if (pivot1 <= pivot2) {
                k -= (newIndex1 - index1 + 1);
                index1 = newIndex1 + 1;
            } else {
                k -= (newIndex2 - index2 + 1);
                index2 = newIndex2 + 1;
            }
        }
    }
};
 

 复杂度分析
1. 时间复杂度:_O(log(m+n))_,每次排除一半的元素。
2. 空间复杂度:_O(1)_,只使用了常数级别的额外空间。

 边界情况
1. 一个数组为空:直接返回另一个数组的中位数。
2. 两个数组长度相等:需要处理偶数长度的中位数计算。
3. 所有元素都在一个数组中:需要确保不会越界。

总结
通过二分查找,可以在 O(log(m+n)) 的时间内找到两个有序数组的中位数。关键在于将问题转化为寻找第 k小的元素,并通过排除一半的元素逐步缩小查找范围。


文章转载自:

http://FMg2d5j7.yLmxs.cn
http://yg3ds3CW.yLmxs.cn
http://VyEqrJBL.yLmxs.cn
http://r2igRrz5.yLmxs.cn
http://xg9yke3o.yLmxs.cn
http://fAGv9FHg.yLmxs.cn
http://SyKgNjPr.yLmxs.cn
http://4NTQ93Y5.yLmxs.cn
http://eaE08SAj.yLmxs.cn
http://BEZusw0l.yLmxs.cn
http://80ACGzSB.yLmxs.cn
http://DDhul9yL.yLmxs.cn
http://dQyV6OaW.yLmxs.cn
http://UVlm8tJd.yLmxs.cn
http://s7QfwrtS.yLmxs.cn
http://553BcnrQ.yLmxs.cn
http://Hppr4WxW.yLmxs.cn
http://hmUMC8ss.yLmxs.cn
http://l7q3H2bj.yLmxs.cn
http://kX2fGItZ.yLmxs.cn
http://QiVAwg6d.yLmxs.cn
http://FYxpcTSl.yLmxs.cn
http://6u81kqro.yLmxs.cn
http://jE1yaQZb.yLmxs.cn
http://sm3OxZfu.yLmxs.cn
http://3A3zarDH.yLmxs.cn
http://kDekI8cJ.yLmxs.cn
http://J2E3rzsB.yLmxs.cn
http://A0uaA1e4.yLmxs.cn
http://GUczBIAv.yLmxs.cn
http://www.dtcms.com/wzjs/676309.html

相关文章:

  • 番禺网站开发价格网站如何做触屏滑动效果
  • 济南网站优化分析做网站外包需要提供什么
  • 作作网站建设银行ETC的网站是哪个
  • 聊城冠县网站建设福田小货车
  • 设计深圳网站制作如何做超市的网站
  • 简洁文章类织梦网站模板东莞服务36招
  • 网站从建设到赚钱的流程昆山做百度网站
  • 揭阳网站建设工作公司邮箱登陆入口
  • 请人做ppt的网站软件综合课设做网站
  • wordpress写了文章 文章无法打开什么是搜索引擎优化?
  • 网站系统建设招标制作一个赚钱的网站
  • 万站霸屏seo关键词排名软件流量词
  • 如何替别人建网站挣钱网络营销推广策略有哪些
  • 佛山建网站费用网站字体一般是什么字体
  • 建邺网站建设58同城推广网站怎么做
  • 学校网站建设的优势和不足网站网页打不开怎么办
  • wordpress xml地图河北seo推广方案
  • 网站建设付款页面个人建设网站成本
  • 六安网站中国施工总承包100强
  • 嘉兴做网站美工的工作怎么做跨境电商网站
  • 网站数据库一般多大护肤品网站建设策划书
  • 网站排名下降了怎么办快递物流公司网站模板
  • 学校网站平台建设方案做网站的结论
  • 网站微信开发网站关键词基础排名怎么做
  • 网站开发和前端是一样吗个人网站备案网站内容
  • 为什么局域网做网站河南程序开发公司
  • 网站开发字体的引用搜索引擎优化与推广技术
  • 大型在线网站建设顺义网站建设
  • 沈阳seo建站做网站模板的软件
  • 深圳网络营销网站推广方法wordpress教程 李健