题解

划分元素组

长数组a,短数组b

数组 元素组1 元素组2
a(长度为m) a1,a2,a3…ai ai+1,ai+2…am-1,am
b(长度为n) b1,b2,b3…bj bj+1,bj+2…bn-1,bn

划分保证元素组1中元素一定小于等于元素组2中的元素,且size(元素组1)-size(元素组2)的绝对值最小。

  1. 若m+n为偶数,划分之后size(元素组1)==size(元素组2)。则中位数一定是ai,ai+1,bj,bj+1这四个数中两个数的平均数。
  2. 若m+n为奇数,划分之后size(元素组1)+1==size(元素组2)。则中位数一定是ai,ai+1,bj,bj+1这四个数中的一个。

如何划分数组

  1. 划分长数组,因为长数组中的元素能定位短数组中的不同元素(也可能定位不到),而短数组定位长数组中的元素是受限的。
  2. 根据长数组元素定位短数组元素。
    考虑如下情况。
    短数组a = {3};
    长数组b = {1,2,4,5,6};
    若用短数组去定位长数组,则a0总是定位到b3(下标=(m+n)/2-0=3,采用不同的计算方法可以得到不同的下标),而b3=5,显然不是中位数。

确定中位数的值

  1. 若m+n为偶数,则ans = (max(ai,bj)+min(ai+1,bj+1))/2;
  2. 若m+n为奇数,由于元素组2比元素组1个数多一个,中位数一定存在于ai+1,bj+1,则ans = min(ai+1,bj+1);

Code

class Solution {public:double findMedianSortedArrays(vector<int>& a, vector<int>& b) {// m,n表示两vector数组的大小。int m = a.size();int n = b.size();// 若a数组长度小于b数组,则交换两数组。因为我们要根据长数组元素定位短数组中的对应元素if(m < n) return findMedianSortedArrays(b,a);int l = 0, r = m;double ans;int mid1, mid2,left1,left2,right1,right2;while (l < r) {// mid1为二分数组a,mid2对应mid1取值mid1 = (l + r) / 2;mid2 = (m + n) / 2 - mid1;// 如果mid2越界,调整l和r,重新确定mid1。if(mid2 < 0){r = mid1;continue;}if(mid2 > n){l = mid1+1;continue;}// 取出a[i]、a[i+1]、b[j]、b[j+1]。左边越界,设为最小值;右边越界,设为最大值。left1 = mid1 - 1 <= -1 ? INT_MIN : a[mid1 - 1];right1 = mid1 >= m ? INT_MAX : a[mid1];left2 = mid2 - 1 <= -1 ? INT_MIN : b[mid2 - 1];right2 = mid2 >= n ? INT_MAX : b[mid2];// 如果满足左边元素组小于等于右边元素组,跳出循环if (right1 >= left2 && left1 <= right2) {break;}// 如果不满足,则调整l,r重新取mid1。if (right1 < left2) {l = mid1+1;}if (left1 > right2) {r = mid1;}}//如果为奇数if (1 & (m + n)) {ans = 1.0*min(right1, right2);}else {ans = 1.0*(max(left1, left2) + min(right1, right2)) / 2;}return ans;}
};

LeetCode4. Median of Two Sorted Arrays(二分法)相关推荐

  1. leetcode4:Median of Two Sorted Arrays

      本质上就是一个有序数组合并,然后求中位数,不用细讲,直接给代码! package _20171021;public class Main {public static void main(Stri ...

  2. 算法—两个有序数组的中位数 Median of Two Sorted Arrays

    关注微信公众号:CodingTechWork,一起学习进步. 题目 There are two sorted arrays nums1 and nums2 of size m and n respec ...

  3. 【LeetCode】004 Median of Two Sorted Arrays 两个排序数组合并后的中位数

    题目:LeetCode 004 Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m an ...

  4. LeetCode: Median of Two Sorted Arrays 解题报告

    Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respectively. Find t ...

  5. Kotlin实现LeetCode算法题之Median of Two Sorted Arrays

    题目Median of Two Sorted Arrays(难度Hard) 方案1,数组合并&排序调用Java方法 1 import java.util.* 2 3 class Solutio ...

  6. LeetCode刷题第二天——3Longest Substring Without repeating character 4 Median of Two Sorted Arrays...

    混淆点: 子串 连续 子序列 可以不连续 知识点: HashMap: 出现问题: 1.使用unordered_map头文件时报错 #error This file requires compiler ...

  7. Leetcode平台上的Median of Two Sorted Arrays题目用Java快排实现

    Leetcode平台上的Median of Two Sorted Arrays题目,大意就是找两个已排序数组的中位数.今天先用快排的方式实现一下,代码如下: There are two sorted ...

  8. Median of Two Sorted Arrays

    problem: There are two sorted arrays nums1 and nums2 of size m and n respectively. 有两个排序好的数列num1和num ...

  9. LeetCode Median of Two Sorted Arrays (DFS)

    There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted ...

最新文章

  1. 龙格-库塔法(runge-kutta)matlab代码及含义,龙格-库塔法(Runge-Kutta)matlab代码及含义...
  2. hadoop之 参数调优
  3. 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
  4. java 中的路径问题总结(绝对路径与相对路径) .
  5. mysql读书笔记---if语句
  6. 分辨率到底是个什么概念?它和DPI之间是什么关系?
  7. 重磅汇总!2015-2019学硕国家线走势情况!
  8. design and analysis of computational and physical experiments
  9. NOIP之旅:NOIP2014篇
  10. html5中的FileReader对象
  11. 数学家、数学轶事与数学史话
  12. 五年级上册计算机工作总结,五年级上册数学教学工作总结
  13. APP测试与WEB测试
  14. 使用 OpenSSL 创建ssl自签名证书
  15. 蓝桥杯国赛【机器人行走】 Python
  16. verilog实数函数
  17. 关关于android 微信sdk 分享 图片 到 朋友圈 的问题
  18. Day050--jQuery表单事件 轮播图 插件库 ajax
  19. C#实现的基于RFID射频卡的学校智能刷卡考勤系统
  20. IP协议+以太网协议

热门文章

  1. 每日程序C语言27-矩阵对角线求和
  2. python json解析方法_Python 中的 JSON 方式讲解
  3. thymeleaf 中文_springboot 整合 thymeleaf(上手即用)
  4. 上海教师中级职称英语计算机考试,计算机教师如果考过了软考中级对职称评定有用吗,学校会承认嘛,有人懂吗,求助...
  5. java 自定义函数的调用_Java/Android中的函数调用回调函数自定义回调函数
  6. arcgis flex aqi 3大util
  7. Windows下用Mingw编译Boost.Regex库
  8. mint-ui 中 Infinite scroll 在tab-container中使用数据全部加载的问题
  9. shell编程中如何执行oracle语句
  10. 滚动条加载功能实现(懒加载)