Median of Two Sorted Arrays
2015-05-04 21:32
267 查看
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[]{})); } }
相关文章推荐
- LeetCode 4 Median of Two Sorted Arrays
- Median of Two Sorted Arrays - LeetCode
- Median of Two Sorted Arrays
- Leetcode_Median of Two Sorted Arrays
- [Leetcode #4]Median of Two Sorted Arrays 计算两个有序数组的中位数
- leetcode 4:median-of-two-sorted-arrays
- Leetcode Median of Two Sorted Arrays
- [leetcode] median of two sorted arrays[C++ vector版本]
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Leetcode题解 - 4. Median of Two Sorted Arrays
- 【LeetCode OJ】Median of Two Sorted Arrays
- 【leetcode】medianofTwoSortedArrays
- 【LeetCode OJ 004】Median of Two Sorted Arrays
- LeetCode 4. Median of Two Sorted Arrays
- 【数组】两个排序数组的中位数Median of Two Sorted Arrays
- Leetcode 4 Median of Two Sorted Arrays
- LeetCode | Median of Two Sorted Arrays
- LeetCode-Median of Two Sorted Arrays
- leetcode 4. Median of Two Sorted Arrays