Median of Two Sorted Arrays
来源:互联网 发布:金蝶软件建账流程 编辑:程序博客网 时间:2024/06/09 13:33
package leetcode.xuyi;import org.junit.Test;/** * Created by ethan on 2015/5/4. */public class MedianOfTwoSortedArrays { // 思路1: 由于时间复杂度限制在O(log(m+n)),只能使用二分法 // 其实这道题可以一般化到求最小的第n位数 public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len = nums1.length + nums2.length; if ((len&0x1)==1) return findMedian(nums1, 0, nums2, 0, len/2+1); else return (findMedian(nums1, 0, nums2, 0, len/2)+findMedian(nums1, 0, nums2, 0, len/2+1))/2.0; } public double findMedian(int[] nums1, int start1, int[] nums2, int start2, int target){ // 判断参数 int len1 = nums1.length - start1; int len2 = nums2.length - start2; if (len1 > len2) // return 关键字不能少啊。。。 调了一个小时啊,妈蛋 return findMedian(nums2, start2, nums1, start1, target); if (len1 == 0) { return nums2[start2 + target - 1]; } if (target == 1){ return Math.min(nums1[start1], nums2[start2]); } int pa = Math.min(target/2, len1); int pb = target - pa; if(nums1[start1+pa-1] < nums2[start2+pb-1]){ return findMedian(nums1, start1+pa, nums2, start2, target-pa); }else if (nums1[start1+pa-1] > nums2[start2+pb-1]){ return findMedian(nums1, start1, nums2, start2+pb, target-pb); }else return nums1[start1+pa-1]; } // 思路2: 先排序,O(m+n) 显然不能满足O(log(m+n)的要求) 但是能Accepted public double findMedianSortedArrays1(int[] nums1, int[] nums2) { if (nums1.length == 0 && nums2.length==0) return 0; int cur_1 = 0; int cur_2 = 0; int[] ans = new int[nums1.length+nums2.length]; int index = 0; while(cur_1< nums1.length && cur_2<nums2.length){ if (nums1[cur_1] < nums2[cur_2]){ ans[index++] = nums1[cur_1]; cur_1++; }else { ans[index++] = nums2[cur_2]; cur_2++; } } while (cur_1< nums1.length){ ans[index++] = nums1[cur_1]; cur_1++; } while (cur_2< nums2.length){ ans[index++] = nums2[cur_2]; cur_2++; } int len = ans.length; if (len%2 == 0) return (ans[len/2] + ans[len/2-1])/2.0; else return ans[len/2]; } @Test public void test4(){ System.out.println(findMedianSortedArrays(new int[]{2}, new int[]{})); }}
0 0
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of two sorted arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- median-of-two-sorted-arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- 高效程序员的45个习惯之敏捷编码
- Django学习笔记(第二节)Hello World站点
- 数论-唯一分解定理
- 第九周项目2(1)-Time类中的运算符重载(续)
- 结构体类型数据作为函数参数(三种方法
- Median of Two Sorted Arrays
- 小数的二进制表示,阶码
- 栈---回文判断
- java 线程的一些理解
- 栈的压入、弹出序列-剑指offer(java版)
- Symmetric Tree
- 优化 SQL SELECT 语句性能的 6 个简单技巧
- php 建造者模式
- sdcard 和mnt/sdcard 两个文件夹的区别