Median of Two Sorted Arrays
2015-06-09 16:45
239 查看
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)).
我的时间复杂度为O(n),其实仅为(m+n)/2
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.length, len2 = nums2.length;
if(len1 == 0 && len2 == 0){
return 0;
}
int cou = len1 + len2;
int median = 0;
boolean isEven = false;
if(cou % 2 == 1){
median = cou/2+1;
}else{
median = cou/2;
isEven = true;
}
int i = 0, j = 0;
while(i+j < median-1){
if(i < len1 && j < len2){
if(nums1[i] <= nums2[j]){
i++;
}else{
j++;
}
}else if(j < len2){
j++;
}else{
i++;
}
}
if(isEven){
if(i < len1 && j < len2){
int i1 = 0, i2 = 0;
if(nums1[i] < nums2[j]){
i1 = nums1[i];
if(i+1<len1){
i2 = Math.min(nums1[i+1], nums2[j]);
}else{
i2 = nums2[j];
}
}else if(nums1[i] > nums2[j]){
i1 = nums2[j];
if(j+1 < len2){
i2 = Math.min(nums1[i], nums2[j+1]);
}else{
i2 = nums1[i];
}
}else{
i1 = nums1[i];
i2 = nums2[j];
}
return (i2+i1)/2.0;
}else if(i < len1){
return (nums1[i]+nums1[i+1])/2.0;
}else{
return (nums2[j]+nums2[j+1])/2.0;
}
}else{
if(i < len1 && j < len2){
return Math.min(nums1[i], nums2[j]);
}else if(i < len1){
return nums1[i];
}else{
return nums2[j];
}
}
}
}
size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
我的时间复杂度为O(n),其实仅为(m+n)/2
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.length, len2 = nums2.length;
if(len1 == 0 && len2 == 0){
return 0;
}
int cou = len1 + len2;
int median = 0;
boolean isEven = false;
if(cou % 2 == 1){
median = cou/2+1;
}else{
median = cou/2;
isEven = true;
}
int i = 0, j = 0;
while(i+j < median-1){
if(i < len1 && j < len2){
if(nums1[i] <= nums2[j]){
i++;
}else{
j++;
}
}else if(j < len2){
j++;
}else{
i++;
}
}
if(isEven){
if(i < len1 && j < len2){
int i1 = 0, i2 = 0;
if(nums1[i] < nums2[j]){
i1 = nums1[i];
if(i+1<len1){
i2 = Math.min(nums1[i+1], nums2[j]);
}else{
i2 = nums2[j];
}
}else if(nums1[i] > nums2[j]){
i1 = nums2[j];
if(j+1 < len2){
i2 = Math.min(nums1[i], nums2[j+1]);
}else{
i2 = nums1[i];
}
}else{
i1 = nums1[i];
i2 = nums2[j];
}
return (i2+i1)/2.0;
}else if(i < len1){
return (nums1[i]+nums1[i+1])/2.0;
}else{
return (nums2[j]+nums2[j+1])/2.0;
}
}else{
if(i < len1 && j < len2){
return Math.min(nums1[i], nums2[j]);
}else if(i < len1){
return nums1[i];
}else{
return nums2[j];
}
}
}
}
相关文章推荐
- DATEDIF函数
- SSH中初次使用Ajax
- jquery动态生成表单元素
- portaudio示例
- 在命令行中加参数的文件复制程序
- 调整数组顺序使奇数位于偶数前面
- 正式安家
- Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成
- org.tinygroup.validate-验证框架
- org.tinygroup.ehcache-EhCache缓存解决方案
- org.tinygroup.jcscache-JCS缓存解决方案
- poj1159(dp,最长公共子序列)
- Oracle 别名
- CSS 清除浮动的几种方式
- 【译】国外优秀JavaScript资源推荐
- android:descendantFocusability用法简析
- 持续努力,变平凡为非凡
- NStimer 之我的见解 (发送验证码的那种)
- org.tinygroup.templateweblayer-web层扩展
- Category