LeetCode寻找两个有序数组的中位数
题目:
nums2 = [2]
nums2 = [3, 4]
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
数组A剩下的len1-i和数组B剩下的len2-j个元素之和保持一致
此时只要满足条件a[i-1]<b[j]&&b[j-1]<a[i]时,中位数就可得
处理奇偶时,为保证i+j=(m+n)/2=>i+j=(m+n-1)/2 偶数=>不变 奇数平半分
因为不能直接改变i和j所有用start和end来控制,或者说是i的范围
int m=nums1.length,n=nums2.length;
if(m>n)//保证len1<=len2
return getZ(nums2,nums1); int start=0,end=m;
int maxl = 0,minr = 0; while(start<=end) {
int i=(start+end)/2;
int j=(m+n+1)/2-i; if(i>start&&nums1[i-1]>nums2[j]) {//i太大应该变小,右边范围左移
end--;
}else if(i<end&&nums2[j-1]>nums1[i]){//i太小应该变大,左边范围扩大
start++;
}else {
maxl=(i==0)?nums2[j-1]:((j==0)?nums1[i-1]:(nums1[i-1]>nums2[j-1]?nums1[i-1]:nums2[j-1]));
if((m+n)%2!=0)
return maxl;
else
minr=(i==m)?nums2[j]:((j==n)?nums1[i]:(nums1[i]<nums2[j]?nums1[i]:nums2[j]));
return (maxl+minr)/2.0;
}
}
return 0.0;
过程中遇到的问题及理解:
1,红色第一处以及红色第二处如果规定为(i>=1)(i<=m)执行时间会变长,或者是说start和end为什么可以代表i的范围
2,此处的返回不能写在外面因为当m=0时,j可能会越界(如{}{1}这两个数组执行时),因此奇数时直接返回,而只有奇数时才会越界
3,end--和start++的确定不太明白,还是想不通start和end为什么可以代表i的范围
###########################################################################
更新:改变了下面红色代码,二分法不断选择正确的一半的区间
int m=nums1.length,n=nums2.length;
if(m>n)//保证len1<=len2
return getZ(nums2,nums1);
int start=0,end=m;
int maxl = 0,minr = 0;
while(start<=end) {
int i=(start+end)/2;
int j=(m+n+1)/2-i;
if(i>start&&nums1[i-1]>nums2[j]) {//i太大应该变小,右边范围左移
end=i-1;
}else if(i<end&&nums2[j-1]>nums1[i]){//i太小应该变大,左边范围扩大
start=1+i;
}else {
maxl=(i==0)?nums2[j-1]:((j==0)?nums1[i-1]:(nums1[i-1]>nums2[j-1]?nums1[i-1]:nums2[j-1]));
if((m+n)%2!=0)
return maxl;
else
minr=(i==m)?nums2[j]:((j==n)?nums1[i]:(nums1[i]<nums2[j]?nums1[i]:nums2[j]));
return (maxl+minr)/2.0;
}
}
return 0.0;
问题是测试显示这个运行时间更长

LeetCode寻找两个有序数组的中位数的更多相关文章
- leetcode -- 寻找两个有序数组的中位数
题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nu ...
- LeetCode Golang 4. 寻找两个有序数组的中位数
4. 寻找两个有序数组的中位数 很明显我偷了懒, 没有给出正确的算法,因为官方的解法需要时间仔细看一下... func findMedianSortedArrays(nums1 []int, nums ...
- Leetcode(4)寻找两个有序数组的中位数
Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定两个大小为 m 和 n 的有序数组 nums1 和* nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O( ...
- Java实现 LeetCode 4 寻找两个有序数组的中位数
寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...
- 0004. 寻找两个有序数组的中位数(Java)
4. 寻找两个有序数组的中位数 https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 最简单的就是用最简单的,把两个数组分别抽出然 ...
- 【LeetCode】寻找两个有序数组的中位数【性质分析+二分】
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- leetcode题目4.寻找两个有序数组的中位数(困难)
题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 ...
- leetcode刷题四<寻找两个有序数组的中位数>
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- [LeetCode] 4. 寻找两个有序数组的中位数
题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 ...
随机推荐
- PHP代码审计理解(三)---EMLOG某插件文件写入
此漏洞存在于emlog下的某个插件---友言社会化评论1.3. 我们可以看到, uyan.php 文件在判断权限之前就可以接收uid参数.并且uid未被安全过滤即写入到了$uyan_code中. 我们 ...
- [YII2] 自带分页调整
在search Model的search()方法里有一个$dataProvider 属性 ,在这个属性数组里添加 'pagination' => ['pageSize' => 10,],设 ...
- mybatis源码学习:一级缓存和二级缓存分析
目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCa ...
- discuz修改禁止性别保密选项
第一步找到source/function/function_profile.php 第二步 注释下面的代码 else { $html .= '<option value="0&quo ...
- 2019-2020-1 20199310《Linux内核原理与分析》第四周作业
1.问题描述 在前面的文章中,已经接触过一些Linux内核的知识,本文将进一步从Linux内核源代码的目录结构入手,在Oracle VM VirtualBox的Linux环境中构造一个简单的操作系统M ...
- 反向代理负载均衡之haproxy
在上篇安装的nginx的机器环境上将nginx停掉 /usr/local/nginx/sbin/nginx -s stop 在linux-node2上编译安装haproxy作为反向代理服务器 [roo ...
- Spring5参考指南:容器扩展
文章目录 BeanPostProcessor自定义bean BeanFactoryPostProcessor自定义配置元数据 使用FactoryBean自定义实例化逻辑 Spring提供了一系列的接口 ...
- Libra教程之:来了,你最爱的Move语言
文章目录 Move语言 Move的核心概念 Move交易脚本 Move modules Move resources 写一个Move程序 编写交易脚本 编写自己的Modules Move语言 Move ...
- QQ网站的源代码
链接:https://pan.baidu.com/s/1mqetTbauKTI0KJOaU8wW5A 提取码请加QQ:2669803073获取 声明:仅供学习,切勿用于其他用途
- 怎样实现App安装来源追踪
众所周知,国内的应用商店存在一定的限制,开发者很难有效监测到App安装来源的精准数据.但在实际推广中,广告效果.用户行为.付费统计.邀请关系等不同渠道的指标却是衡量渠道价值的关键,对App的运营推广和 ...