题解 | #在两个长度相等的排序数组中找到上中位数#

在两个长度相等的排序数组中找到上中位数

http://www.nowcoder.com/practice/6fbe70f3a51d44fa9395cfc49694404f

题目主要信息:

  • 有两个等长都为nn的递增数组,需要求两个数组中所有数的上中位数
  • 上中位数即两个数组中第nn小的数字

具体思路:

我们需要找的上中位数即两个数组中的第nn小,那去掉前n1n-1个较小值就可以找到。既然两个数组都是递增数组,那么可以依次从两个数组开头得到最小值,使用双指针同步开始。

  • step 1:准备双指针,分别从两个数组的首部开始。
  • step 2:一共需要遍历n1n-1次,找到前n1n-1个最小的数字,每次比较将较小值的指针后移。
  • step 3:最后再一次比较得到的较小值就是上中位数。

具体过程可以参考下列图示: alt

代码实现:

class Solution {
public:
    int findMedianinTwoSortedAray(vector<int>& arr1, vector<int>& arr2) {
        int n = arr1.size();
        int x = 0, y = 0; //双指针
        for(int i = 1; i < n; i++){ //去掉前n-1个最小的数
            if(arr1[x] < arr2[y]) //每次取出较小的值
                x++;
            else
                y++;
        }
        return arr1[x] < arr2[y] ? arr1[x] : arr2[y]; //第n个最小的数
    }
};

复杂度分析:

  • 时间复杂度:O(n)O(n),遍历一次从1到nn
  • 空间复杂度:O(1)O(1),无额外辅助空间,常数级变量
孤帆远影碧空尽 文章被收录于专栏

牛客网各类题单题解~

全部评论

相关推荐

2025-12-04 15:23
三峡大学 FPGA工程师
不知道怎么取名字_:玩游戏都写到简历上了啊
投递BOSS直聘等公司8个岗位
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务