【leetcode】4. Median of Two Sorted Arrays
题目描述:
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
解题思路:
这道题个人觉得是很难的,要想解出这个题,就必须了解一下几点:
1.求一列长度为len的数字的中位数,其实也可以被看做是求第len/2小的数(len为奇),或者求第len/2,len/2 +1小的数的平均值的数(len为偶);
2.同时还要注意若想求两个有序数组array1和array2中第n小的数,则可以取a,b满足a+b=n,则如果array1[a-1]<array2[b-1],则array1[a]必然小于第n小的数。可以将这些数排除后,继续求剩余的数中第n-a小的数就是所要的答案;
3.要想很快的缩小一个数的值到所求值,用折半的方法可以减少循环次数。
代码如下:
public class Solution {
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1=nums1.length;
int len2=nums2.length;
if(((len1+len2)&1)==0){
int count=(len1+len2)/2;
int num1=fun(nums1,0,nums2,0,count);
int num2=fun(nums1,0,nums2,0,count+1);
return (double)(num1+num2)/2;
}
else{
int count=(len1+len2)/2 +1;
int num=fun(nums1,0,nums2,0,count);
return (double)num;
}
}
public static int fun(int[] nums1,int from1,int[] nums2,int from2,int k){
//考虑到某个数组中的数已经全部被排除
if(from1>=nums1.length){
return nums2[from2+k-1];
}
if(from2>=nums2.length){
return nums1[from1+k-1];
}
//k=1即求最小,比较两个数组中的from位置处的值即可
if(k==1){
return nums1[from1]<nums2[from2]?nums1[from1]:nums2[from2];
}
//为了减少代码量,要保证nums1的长度要小于nums2的长度
if(nums1.length-from1>nums2.length-from2){
int[] nums=nums1;
int from=from1;
nums1=nums2;
from1=from2;
nums2=nums;
from2=from;
}
//nums1最好能截取k/2位置处的数,但要保证不能超过nums1中还存在的数的个数
int len1 = Math.min(nums1.length-from1, k/2);
//保证len1+len2=k;
int len2 = k -len1;
if(nums1[from1+len1-1]>=nums2[from2+len2-1]){
from2=from2+len2;
int result = fun(nums1,from1,nums2,from2,k-len2);
return result;
}
else{
from1=from1+len1;
int result = fun(nums1,from1,nums2,from2,k-len1);
return result;
}
}
}
【leetcode】4. Median of Two Sorted Arrays的更多相关文章
- 【LeetCode】4. Median of Two Sorted Arrays (2 solutions)
Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respectively. Find t ...
- 【LeetCode】4. Median of Two Sorted Arrays 寻找两个正序数组的中位数
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:数组,中位数,题解,leetcode, 力扣,python ...
- 【LeetCode】004. Median of Two Sorted Arrays
题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- 【LeetCode】4.Median of Two Sorted Arrays 两个有序数组中位数
题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- 【LeetCode】4. Median of Two Sorted Arrays(思维)
[题意] 给两个有序数组,寻找两个数组组成后的中位数,要求时间复杂度为O(log(n+m)). [题解] 感觉这道题想法非常妙!! 假定原数组为a,b,数组长度为lena,lenb. 那么中位数一定是 ...
- 【一天一道LeetCode】#4 Median of Two Sorted Arrays
一天一道LeetCode (一)题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find th ...
- 【leetcode】1213.Intersection of Three Sorted Arrays
题目如下: Given three integer arrays arr1, arr2 and arr3 sorted in strictly increasing order, return a s ...
- 【LeeetCode】4. Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...
- 【medium】4. Median of Two Sorted Arrays 两个有序数组中第k小的数
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...
随机推荐
- Chrome插件开发 尝试1
1.新建文件夹 如图:整个项目的结构 2.新建一个名为manifest.json的文件,编码模式为utf-8,(可以先建好txt文件然后再将文件后缀txt改为json) 3.用记事本写入代码如下:(m ...
- C#文件读写常用类介绍
首先要熟悉.NET中处理文件和文件夹的操作.File类和Directory类是其中最主要的两个类.了解它们将对后面功能的实现提供很大的便利. 本节先对和文件系统相关的两个.NET类进行简要介 ...
- 从一行代码里面学点JavaScript
从一行代码里面学点JavaScript 现如今,JavaScript无处不在,因此关于JavaScript的新知识也是层出不穷.JavaScript的特点在于,要学习它的语法入门简简单,但是要精通使用 ...
- AngularJS - 插件,module注入
Index.html <body> <div ng-app="myApp"> <div ng-controller="firstContro ...
- Discuz!X/模板标签说明
Discuz 模板标签说明 Discuz! 的模板采用近似 PHP 表达式的语法,基本都是可识别的HTML,但涉及到变量和动态内容时,基本形式下: <!-{ 代码内容 }-> 逻辑元素包围 ...
- df 和 du 命令详解
df命令详细用法 a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案 ...
- Tick and Tick
The three hands of the clock are rotating every second and meeting each other many times everyday. F ...
- Java基础知识强化之网络编程笔记24:Android网络通信之 AndroidAsync(基于nio的异步通信库)
1. AndroidAsync AndroidAsync 是一个基于nio的异步socket ,http(客户端服务器端),websocket,socket.io库,AndroidAsync 是一 ...
- Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换
Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 上一篇我们说到了使用jquer ...
- [BigData]关于Hadoop学习笔记第一天(PPT总结)(一)
适合大数据的分布式存储与计算平台 l作者:Doug Cutting l受Google三篇论文的启发 lApache 官方版本(1.0.4) lCloudera 使用下载最多的版本,稳定,有商业支持 ...