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

你做的网站可视区域多少网络服务提供商

你做的网站可视区域多少,网络服务提供商,网站建设hnshangtian,制作图片的软件免费题目要求在两个有序数组中找到中位数。由于时间复杂度要求为 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://www.dtcms.com/wzjs/508153.html

相关文章:

  • 网站给篡改了要怎么做如何自己创建网站
  • 做公司门户网站的重点外链兔
  • 做网站如何网站考虑优化企业网站优化关键词
  • 用什么做响应式网站线上推广策略
  • 马鞍山住房建设委员会网站搜索引擎营销的过程
  • 做网站哪里最好代发百度帖子包收录排名
  • 通过网站做外贸怎样做网站平台
  • 网站建设费用如何做账关键词查找网站
  • 一个网站建设需要什么nba最新排行
  • 西安市政府官方网站内容营销平台有哪些
  • 教科院网站建设网络服务主要包括
  • 铭坐网站建设网站关键词排名seo
  • 做网站需要用什么系统企业qq一年多少费用
  • 做爰试看的网站seo查询爱站网
  • 惠城区城乡规划建设局网站谷歌浏览器网页版入口
  • 网站建设需要会什么软件有哪些搜索引擎竞价排名
  • 网站在开发过程中如何做SEO好搜网
  • 韩国优秀网站欣赏游戏推广引流软件
  • app ui设计欣赏 网站天津百度推广中心
  • 深圳品牌网站开发网站关键词快速排名工具
  • 网页设计与网站建设课程总结推广方式都有哪些
  • 建设大型网站推广收费设计师经常用的网站
  • 内销机械做哪个网站好seo投放
  • 兰州疫情最新消息今天新增数据短视频搜索优化
  • 平面设计网站有哪些百度自动点击器下载
  • 土特产网站的制作做外贸网站的公司
  • php做网站真的有前途吗怎么简单制作一个网页
  • 做微整的网站百度网络营销推广
  • asp网站和php网站的区别宜兴网站建设
  • 厦门建网站公司武汉seo论坛