博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中位数 - Median of Two Sorted Arrays[LeetCode]
阅读量:6604 次
发布时间:2019-06-24

本文共 1697 字,大约阅读时间需要 5 分钟。

还是需要看原始解释,英文解释,多看几遍,多想想,就明白了。中文的文章不够清晰的。

1 详解过程:

视频

2 定义:

3 自己翻译下 - 中位数特点:

  1. 把一个集合分割为长度相等的子集
  2. 其中一个子集元素总是大于另一个

也可参考wiki:

4 把答案整理为js代码:

var findMedianSortedArrays = function(A, B) {  var m = A.length;  var n = B.length;  if (m > n) { // to ensure m<=n    var temp = A;    A = B;    B = temp;    var tmp = m;    m = n;    n = tmp;  }  var iMin = 0,    iMax = m,    halfLen = Math.floor((m + n + 1) / 2);  while (iMin <= iMax) {    var i = Math.floor((iMin + iMax) / 2);    var j = halfLen - i;    if (i < iMax && B[j - 1] > A[i]) {      iMin = i + 1; // i is too small    } else if (i > iMin && A[i - 1] > B[j]) {      iMax = i - 1; // i is too big    } else { // i is perfect      var maxLeft = 0;      if (i == 0) {        maxLeft = B[j - 1];      } else if (j == 0) {        maxLeft = A[i - 1];      } else {        maxLeft = Math.max(A[i - 1], B[j - 1]);      }      if ((m + n) % 2 == 1) { // 如果奇数,则直接返回maxLeft;不然,则找到minRight        return maxLeft;      }      var minRight = 0;      if (i == m) {        minRight = B[j];      } else if (j == n) {        minRight = A[i];      } else {        minRight = Math.min(B[j], A[i]);      }      // 偶数,返回平均值      return (maxLeft + minRight) / 2;    }  }  return 0;}复制代码

5 其他

1 为什么会有第二个红线的公式?

原来是从第一个红线换算得出的:

代码中其实就是:
var j = halfLen - i; // halfLen = Math.floor((m + n + 1) / 2);

2 找到后,为什么奇数的中位数是比较最大值max(A[i-1],B[j-1]),而不是比较最小值min(A[i],B[j])?

因为一开始是用随机数i来切分数组的,如下图:

3 其他两个条件中,为什么要限定i<m和i>0?

初步觉得是一开始要求0<i<m,而条件1中是i=m或i=0,所以条件2和条件3肯定是i<m和i>0。

不用j>0和j<n条件,下面有解释了:(从i<m可得出j>0;从j>0可得出j<n)

6 想法不定时更新

  1. 记得原来数组A和数组B是已经排好序的,所以只需比较A[i-1]<=B[j]和B[j-1]<=A[i]。因为A[i-1]肯定小于等于A[i],B[j-1]肯定小于等于B[j]。具体可参考视频 -- 0519 22.31

转载于:https://juejin.im/post/5cdd6d6f6fb9a031ff0d3ec4

你可能感兴趣的文章
mysql表时间戳字段设置
查看>>
如何将本地vue项目上传到github
查看>>
极验验证码示例
查看>>
# 基于Gitolite搭建Git Server - 支持SSH&HTTP
查看>>
C# DllImport的用法
查看>>
Flask 中command的使用
查看>>
Java SVN检出项目出现报错,Expected value at 1:0 Expected value at 2:0 Expected value at xx:xx错误的解决,实测解决...
查看>>
业务侧有大量timeout请求超时日志
查看>>
openwrt makefile选项
查看>>
JavaScript常用编程问题记录
查看>>
前端知识总结-2018上篇
查看>>
Ext Js简单常用对象的创建使用
查看>>
ARR2.5 配置反向代理
查看>>
hdfs的FileSystem实例化
查看>>
uva 10878 - Decode the tape
查看>>
如何在列表,字典,集合中根据条件筛选数据
查看>>
js 随机数 转 http://www.cnblogs.com/banbu/archive/2012/07/25/2607880.html
查看>>
关于angular自定义组件在外面使用的时候异步的拉取数据传递给组件的问题
查看>>
hausaufgabe--python 17- Function definition
查看>>
【JOISC2019|2019】【20190622】cake3
查看>>