题目描述
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5

解题思路
需要时间复杂度为O(log(m+n)),所以应该使用二分法来查找,在两个未合并的有序数组中查找中位数,迭代形式的二分法查找
代码如下

class Solution {
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int m = nums1.size(), n = nums2.size();if (m < n) return findMedianSortedArrays(nums2, nums1);if (n == 0) return ((double)nums1[(m - 1) / 2] + (double)nums1[m / 2]) / 2.0;int left = 0, right = n * 2;while (left <= right) {int mid2 = (left + right) / 2;int mid1 = m + n - mid2;double L1 = mid1 == 0 ? INT_MIN : nums1[(mid1 - 1) / 2];double L2 = mid2 == 0 ? INT_MIN : nums2[(mid2 - 1) / 2];double R1 = mid1 == m * 2 ? INT_MAX : nums1[mid1 / 2];double R2 = mid2 == n * 2 ? INT_MAX : nums2[mid2 / 2];if (L1 > R2) left = mid2 + 1;else if (L2 > R1) right = mid2 - 1;else return (max(L1, L2) + min(R1, R2)) / 2;}return -1;}
};

Leetcode(4)寻找两个有序数组的中位数相关推荐

  1. 【LeetCode】寻找两个有序数组的中位数【性质分析+二分】

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

  2. leetcode 4. 寻找两个有序数组的中位数,c语言

    leetcode上第四道题,如下. 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假 ...

  3. LeetCode 4. 寻找两个有序数组的中位数(二分查找,难)

    文章目录 1. 题目 2. 解题 2.1 合并数组 2.2 优化2.1解法,双指针 2.3 二分法(找第k个数) 2.4 切分法 1. 题目 给定两个大小为 m 和 n 的有序数组 nums1 和 n ...

  4. [leetcode] 4 寻找两个有序数组的中位数(二分+递归查找第K小数)(重要)

    问题描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 n ...

  5. LeetCode 4.寻找两个有序数组的中位数

    题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 n ...

  6. leetcode 4 --- 寻找两个有序数组的中位数

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

  7. [leetcode] 4. 寻找两个有序数组的中位数

    官方题解:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/xun-zhao-liang-ge-you-xu- ...

  8. 20191016:(leetcode习题)寻找两个有序数组的中位数

    寻找两个有序数组的中位数 题目 大致思路 代码实现 题目 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log( ...

  9. LeetCode(Python实现)—寻找两个有序数组的中位数

    4.寻找两个有序数组的中位数 题目大意 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). ...

最新文章

  1. WAV文件中使用有符合整形数
  2. shell 中 if then语句中会跟着-ne -ge之类的参数的含义
  3. tensorboard ckpt pb 模型的输出节点_tensorflow, ckpt 转 pb 并进行预测
  4. mysql使字段自增_Mysql设置自增字段的方法
  5. 从基于直方图的Graph-Cut到Grab-Cut
  6. android 印度语_为什么发展印度语维基百科至关重要
  7. dll侧加载_动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
  8. Matlab之通用特殊矩阵函数
  9. OSPFv3报文中Option字段变化简介
  10. 第三方SSD问题引起电脑频繁重启问题IONVMeController.cpp:5499
  11. EOS Bios Boot Sequence 启动步骤
  12. Dynamsoft Barcode Reader Crack,强大而快速的条码解码
  13. Eclipse设置运行内存大小
  14. 【笔记】vue2.0音乐app——音乐列表以及BetterScroll滚动效果
  15. 笔记本系统转移到固态硬盘
  16. 转:钉钉群直播提取视频文件-电脑版
  17. 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系
  18. Android 轻松实现百度地图定位
  19. 思考力,决定你的产品力
  20. 牛客网在线编程全部题目

热门文章

  1. C语言函数讲义,C语言讲义——指针函数和函数指针
  2. linux查看日志常用命令
  3. android camera 工作原理,Android Camera原理之openCamera模块(一)
  4. 115.n阶方阵求逆
  5. python小游戏扫雷怎么玩的技巧_用 Python 实现扫雷小游戏
  6. CSS 8 品优购项目
  7. NAS网络存储是什么
  8. python--关于requests库的使用(一)
  9. keras读取后缀名为.h5的文件
  10. 【往届已检索】第二届电子、信息与计算技术前沿国际会议征稿中