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

class Solution {public:double findMedianSortedArrays(vector<int>& A, vector<int>& B) {int m = A.size();int n = B.size();if(m > n){vector<int> temp = A;A = B;B = temp;m = A.size();n = B.size();}int iMin = 0, iMax = m, halfLen = (n + m + 1)/2;while(iMin <= iMax){int i = (iMin+iMax)/2;  //0 <= i <= m;int j = halfLen - i; //i + j = m - i + n - j 或 i + j = m - i + n - j + 1if(i < iMax && B[j-1] > A[i]){//i < m ==> j > 0//并且m < n ==> j <= n  iMin = i + 1;        //too small}else if(i > iMin && A[i-1] > B[j]){//i > 0 ==> j < n//并且m < n ==> j >= 0 iMax = i - 1;       //too big}else{double maxLeft = 0;if(i == 0){ maxLeft = B[j-1]; }else if(j == 0) { maxLeft = A[i-1]; }else {  maxLeft = max(A[i-1], B[j-1]);  }if ( (m + n) % 2 == 1 ) { return maxLeft; }int minRight = 0;if(i == m) { minRight = B[j]; }else if(j == n){ minRight = A[i]; }else { minRight = min(A[i], B[j]); }return (maxLeft + minRight)/2.0;}}return 0.0;}
};

m <= n的作用:

            if(i < iMax && B[j-1] > A[i]){//i < m ==> j > 0 //并且m < n ==> j <= n  iMin = i + 1;        //too small}

i < m ==> j > 0,但是,这个时候j会大于n吗?
不会,因为i是大于等于0小于等于m的,由m <= n(一开始保证了) 可以推出j < = n,因为i越小,j就越大,i == 0时,j最大,j = (m + n + 1) /2 - 0 <= (2n + 1)/2 <= n(int运算)

         else if(i > iMin && A[i-1] > B[j]){//i > 0 ==> j < n//并且m < n ==> j >= 0 iMax = i - 1;       //too big}

这个也是同理,由i > 0 ==> j < n,由m < n ==> j >= 0,因为i越大,j就越小,i == m时,j最大,j = (m + n + 1) /2 - m >= (n - m + 1)/2 >= 0(int运算,m <= n)

[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.寻找两个有序数组的中位数

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

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

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

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

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

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

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

最新文章

  1. htmlcss实例小项目_HTMLCSS学习笔记(十九)-- 媒体查询
  2. linux 下oracle启动步骤
  3. CodeForces - 739E Gosha is hunting(最大费用最大流+思维建边)
  4. done (330 lines in 0.02 seconds). 私人笔记,一份WEB测试报告
  5. 这个网站收集了很多杂志的审稿周期和收稿、拒稿意见,值得看看
  6. 关于Hystrix的几个问题
  7. Element NavMenu
  8. 知行合一!如何做好项目经理?
  9. 源代码安装apache遇到的问题解决
  10. Step by Step-构建自己的ORM系列-索引
  11. js中小数四舍五入问题
  12. oracle数据库课后报告,ORACLE数据库课程设计报告
  13. 2019 live tex 发行版_下载和安装Texlive2019
  14. 微支付几个参数的获得
  15. 学生用计算机怎么调,电脑怎么设置学生模式
  16. does not have a companion object, and thus must be initialized here
  17. 关于oracle驱动jiar包版本问题导致的ORA-01460【mybatis+Oracle】
  18. BLE MESH组网(七)真机配置
  19. matlab如何在三维曲面上画线,如何在三维曲面上画线
  20. 2022年新消费趋势洞察(护肤篇):时下大热的美妆成分全面复盘

热门文章

  1. python自动化办公入门-[Python] 自动化办公 docx操作Word基础代码
  2. python画直方图-从零开始学Python【13】--matplotlib(直方图)
  3. python画折线图-python如何画折线图
  4. python读音-原来Python应该这么念,怪不得总被嘲笑~
  5. 线上python课程一般多少钱-培训python多少钱 ?
  6. python程序-调试Python程序代码的几种方法总结
  7. 步进电机选型计算实例_滚珠丝杠选型和电机选型计算
  8. React-组件生命周期
  9. 存储图片到第三方云服务器
  10. win10查询计算机ip和用户名和密码,Win10系统查询计算机IP子网掩码和默认网关设置教程...