当前位置: 首页 > news >正文

官方网站下载穿越火线室内设计网站排行榜前十名知乎

官方网站下载穿越火线,室内设计网站排行榜前十名知乎,泉州关键词优化软件,阳江招聘网鹏程1. 题目 见 寻找两个正序数组的中位数 2. 解题思路 首先一看到题目说是正序数组,且时间复杂度要求在对数级别,所以自然想到了双指针中的二分法。 首先来看一下,假设输入是这两个数组,那么将其逻辑合并成一个大数组的话&#x…

1. 题目

见 寻找两个正序数组的中位数

2. 解题思路

首先一看到题目说是正序数组,且时间复杂度要求在对数级别,所以自然想到了双指针中的二分法。
在这里插入图片描述
首先来看一下,假设输入是这两个数组,那么将其逻辑合并成一个大数组的话,分界线左边为大数组的左边,右边同理。这个数组又是升序的,且原来的两个数组是升序的(即L1<=R1& L2<=R2)。所以在大数组中,L1<=R2 & L2<=R1
所以这里就得到了第一个约束:切割后的中位线要满足交叉小于等于。
然后大数组的中位数呢,就是从中位数左边选择一个大的数字(Max(L1,L2))和右边选一个小的数字(Min(R1,R2))来进行计算。

上面的情况是刚好属于一个逻辑合并数组并且划分中位线后 满足交叉小于的情况,假如像下图划分中位线后不满足交叉小于呢?
在这里插入图片描述
因为L2>R1了,所以我们右移R1,直到比L2大,满足交叉小于等于。
在这里插入图片描述
这个时候会奇怪了,为什么要移动nums2的中位线?
因为此时我们做了一个逻辑合并数组的设想,所以整个大数组中位线两边的元素应该尽量保持相同。
R1移动后nums1中位线左边有5个元素,所以同理移动nums2的中位线,让它的右边也有5个元素。

另外需要注意的是:
1、我们默认只对nums1进行操作,由nums1的操作计算出对nums2的操作。比如 假如不符合交叉小于等于,那么我们就移动nums1的中位线,然后由公式算出nums2的中位线即可。
2、当数组为奇数的时候我们默认把中位线划分在右边一点(左边也是可以的)
在这里插入图片描述

上面说的是两个数组都是偶数的情况,假如有个数字为奇数呢?
在这里插入图片描述
因为数组是有序的,且满足交叉小于等于,且奇数数组的中位数都是划分在右边的(我们约定的),单拎出来nums2看的话,中位数是中位线左边的那个。所以最后逻辑合并大数组了,中位数只要在大数组中位线左边取偏大的就行了。也就是max(L1,L2)

3. 代码

class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {//保持数组长度小的在前面,节省性能if (nums1.length > nums2.length) {return findMedianSortedArrays(nums2, nums1);}int m = nums1.length;int n = nums2.length;int left = 0, right = m;int median1 = 0, median2 = 0;while (left <= right) {//确定第一个数组的分割线median1 = (left + right) / 2;//确定第二个数组的分割线median2 = (m + n + 1) / 2 - median1;//数组1中位分割线左边的数int L1= (median1 == 0 ? Integer.MIN_VALUE : nums1[median1 - 1]);//数组1中位分割线右边的数int R1= (median1 == m ? Integer.MAX_VALUE : nums1[median1]);//数组2中位分割线左边的数int L2= (median2 == 0 ? Integer.MIN_VALUE : nums2[median2 - 1]);//数组2中位分割线右边的数int R2= (median2 == n ? Integer.MAX_VALUE : nums2[median2]);int nums_j = (median2 == n ? Integer.MAX_VALUE : nums2[median2]);if (L1 > R2) {//不符合交叉小于等于 继续二分(左移中位线)right = median1-1;} else if (L2 > R1) {//不符合交叉小于等于 继续二分(右移中位线)left = median1 + 1;} else {//将所有的数合并后,如果是偶数个数,中位数是中间两个数的平均值,如果是奇数个数,中位数是大的数return (m + n) % 2 == 0 ? (Math.max(L1, L2) + Math.min(R1, R2)) / 2.0 :  Math.max(L1, L2);}}return 0.0;}}
http://www.yayakq.cn/news/147036/

相关文章:

  • 苏州城乡建设网站查询河间做网站的公司
  • 自己想做个网站怎么做的长春公司建站模板
  • 网站流量分析指标手机网站友情链接怎么做
  • 百度官方客户端seo刷排名工具
  • 南充响应式网站建设wordpress 软件下载
  • 聚美优品的电子商务网站建设论文wordpress 压缩网站
  • 中国建设信息港网站三只松鼠广告策划书
  • 学校网站建设开发如何注册一个自己的网站
  • 如何请人创建一个网站做彩平的材质网站
  • 上海seo推广平台极限优化主题wordpress
  • 网站备案 哪个省怎么在网站里做关键词优化
  • 网站空间和主机wordpress火车头采集发布模块
  • 网站架构设计师工资水平响应式网站图片代码
  • 网站制作公司在哪里找互联网行业都有哪些专业
  • 神华科技 网站建设电脑版4399游戏网页
  • 网站建设cach目录网站竞价开户
  • 网站建设几个文件夹做爰午夜福利全过程视频网站
  • 站长工具怎么关掉做微商网站制作
  • 视频网站开发是什么俄罗斯搜索引擎yandex
  • 门户网站怎么做才好看怎么注册网店
  • 设计网站页面网站开发要求有哪些
  • 阿里云发布网站在印度做视频网站
  • 闵行网站建设公司wordpress导航样式
  • 网站总是跳转商务网站建设多少钱
  • 网站建设课程实训报告南宁做网店
  • 大型网站制作河北建设广州分公司网站
  • 怎么建立一个网站开展业务网站建设怎么建好
  • 教育企业重庆网站建设制造动漫网站开发目的
  • 买网站需要多少钱辽阳内蒙古网站建设
  • vr网站建设网络营销相关的岗位有哪些