> 简洁易懂讲清原理,讲不清你来打我~

输入两个递增数组,输出中位数
![在这里插入图片描述](https://img-blog.csdnimg.cn/25550994642144228e986284b7e0b8e6.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/482fc490261b434188df19c11e4db07c.png)

> 双指针/合并

p1指向nums1,p2指向nums2,不断选出较小的生成新数组,当较短的到结尾后只取较长数组剩余元素,根据奇偶输出中位数

```cpp
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int p1=0,p2=0;
vector<int>nums3;
while(p1<nums1.size()||p2<nums2.size()){
if(p1==nums1.size()){
nums3.push_back(nums2[p2]);
p2++;
}else if(p2==nums2.size()){
nums3.push_back(nums1[p1]);
p1++;
}
else if(nums1[p1]<nums2[p2]){
nums3.push_back(nums1[p1]);
p1++;
}else{
nums3.push_back(nums2[p2]);
p2++;
}
}
int n=nums3.size();
double ans=0.0;
if(n%2==0){
ans=(nums3[n/2-1]+nums3[n/2])/2.0;
}else{
ans=nums3[n/2];
}
return ans;
}
};
```

> 双指针二分跳跃/第k小

找第k小
明确left1、left2是起点,mid1=left1+k/2-1
如果nums1[mid1]<nums2[mid2],哪怕最极端的[left2,mid2-1]都小于k,也有[left1,mid1]小于k
mid1最大为m-1
如果left=m,即第一个数组没有元素,直接返回第二个数组第k小的元素;如果k=1,返回两数组较小的起点

```cpp
class Solution {
public:
int findK(const vector<int>& nums1, const vector<int>& nums2, int k) {
int m = nums1.size();
int n = nums2.size();
int left1 = 0, left2 = 0;
while (true) {
if (left1 == m) {
return nums2[left2 + k - 1];
}
if (left2 == n) {
return nums1[left1 + k - 1];
}
if (k == 1) {
return min(nums1[left1], nums2[left2]);
}
int mid1 = min(left1 + k / 2 - 1, m - 1);
int mid2 = min(left2 + k / 2 - 1, n - 1);
if (nums1[mid1] <= nums2[mid2]) {
k -= mid1 - left1 + 1;
left1 = mid1 + 1;
}
else {
k -= mid2 - left2 + 1;
left2 = mid2 + 1;
}
}
}

double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int totalLength = nums1.size() + nums2.size();
if (totalLength % 2 == 1) {
return findK(nums1, nums2, (totalLength + 1) / 2);
}
else {
return (findK(nums1, nums2, totalLength / 2) + findK(nums1, nums2, totalLength / 2 + 1)) / 2.0;
}
}
};

```

> 喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~

Leetcode4. 寻找两个正序数组的中位数的更多相关文章

  1. leetcode-4. 寻找两个正序数组的中位数

    leetcode-4. 寻找两个正序数组的中位数. 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2. 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(l ...

  2. 微软面试题: LeetCode 4. 寻找两个正序数组的中位数 hard 出现次数:3

    题目描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数. 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决 ...

  3. leetcode 刷题(数组篇)4题 寻找两个正序数组的中位数(二分查找)

    题目描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的 中位数 . 示例 1: 输入:nums1 = [1,3], nums2 = ...

  4. Leetcode随缘刷题之寻找两个正序数组的中位数

    我一上来没读清题,想着这题这么简单,直接就上手写了: package leetcode.day_12_05; import java.util.ArrayList; import java.util. ...

  5. leetcode 4. Median of Two Sorted Arrays 寻找两个正序数组的中位数(困难)

    一.题目大意 标签: 查找 https://leetcode.cn/problems/median-of-two-sorted-arrays 给定两个大小分别为 m 和 n 的正序(从小到大)数组 n ...

  6. 【LeetCode】4. Median of Two Sorted Arrays 寻找两个正序数组的中位数

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:数组,中位数,题解,leetcode, 力扣,python ...

  7. [LeetCode]4.寻找两个正序数组的中位数(Java)

    原题地址: median-of-two-sorted-arrays 题目描述: 示例 1: 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1, ...

  8. LeetCode-004-寻找两个正序数组的中位数

    寻找两个正序数组的中位数 题目描述:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的 中位数 . 示例说明请见LeetCode官网. ...

  9. 寻找两个已序数组中的第k大元素

    寻找两个已序数组中的第k大元素 1.问题描述 给定两个数组与,其大小分别为.,假定它们都是已按照增序排序的数组,我们用尽可能快的方法去求两个数组合并后第大的元素,其中,.例如,对于数组,.我们记第大的 ...

随机推荐

  1. 采用MVC模式创建一个简单的javascript App

    初次翻译,翻译的不好,还请见谅 JavaScript中最好的一部分之一,也可能是最糟糕的. 在HTML文档的头部添加一个开始和结束脚本标记,并在其中引入一些意大利面条式的代码,毫无疑问这是一种过分简单 ...

  2. 基本FTP服务: 文件传输协议

    1.服务端虚拟机Server,安装可以提供FTP服务软件 [root@server0 ~]# yum -y install vsftpd 2.虚拟机Server操作,启动 vsftpd服务,设置为开机 ...

  3. 搭建支持SSL加密传输的vftpd

    让vsftpd支持SSL 必须让OPENSSL≥0.9.6版本还有就是本身vsftpd版本是否支持 查询vsftpd软件是否支持SSL        [root@localhost vsftpd]# ...

  4. 每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件中。

    步骤:1, 首先编写一个 脚本 backupdb.sh#!/bin/bash #备份路径 BACKUP=/data/backup/sql/dy #当前时间 DATETIME=$(date +%Y-%m ...

  5. 关于kubernetes的十七个实验(二)

    写在开头 时隔好几天,结束了毕业设计中期答辩,更新第二节. 实验二与Kubeadm Kubeadm解决了以下问题:处理TLS加密配置,部署核心Kubernetes组件并确保其他节点可以轻松加入集群. ...

  6. VsCode中添加tasks.json

    选中项目文件夹,按ctrl+shift+p,输入tasks 选择之后,继续选择 然后选择 选中就可以了

  7. python使用venv

    venv模块支持使用自己的站点目录创建轻量级"虚拟环境",可选择与系统站点目录隔离.每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可 ...

  8. 美化terminal时碰到的问题- Set-Theme

    报错: 1 Set-Theme Set-Theme: The term 'Set-Theme' is not recognized as a name of a cmdlet, function, s ...

  9. 39、mysql数据库(视图)

    39.1.视图: 0.创建表及插入数据: 1.创建teacher表及插入数据: (1)创建表: CREATE TABLE teacher( tid int PRIMARY KEY auto_incre ...

  10. 8、基本数据类型(dict)

    8.1.字典: 1.字典元素用大括号括起来,用逗号分割每个元素,字典元素是"key:value"的形式 dic = { "k1": 'v1', #键值对 &qu ...