Median of Two Sorted Arrays
Description
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)).
You may assume nums1 and nums2 cannot be both empty.
- Example 1
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
- Example 2
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
Solution
一种常规思路:两个都是有序数组,自然而然的就是组成另一个新的有序数组,再行寻找中位数。数组长度看是奇数还是偶数,奇数就是正中间的数(这个数左右有相同数量的元素);长度为偶数的话,就是中间两个数的平均数。
Code
public class Solution {
static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int nums[] = new int[nums1.length+nums2.length];
int l=nums1.length+nums2.length;
double median=0;
int i=0,j=0,k=0;
// 按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环
while(i<nums1.length && j<nums2.length)
if(nums1[i] <= nums2[j]) {
nums[k++] = nums1[i++];
}else{
nums[k++] = nums2[j++];
}
/* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 *
* 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/
while(i < nums1.length)
nums[][k++] = nums1[i++];
while(j < nums2.length)
nums[k++] = nums2[j++];
if(l%2==1) median=nums[(l+1)/2-1];
else median= ((nums[l/2-1]+ nums[l/2])/2.0);
return median;
}
Appendix
nums1[i] <= nums2[j] 敲得时候写成了i++,j++导致直接得不出结果