题目描述:
给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。
解析:
1.定义一个新的空数组nums,然后合并数组nums,nums1,nums2
2.合并数组方法,定义三个指针i,j,k分别指向数组nums1,nums2,nums,
遍历数组nums1和nums2的值,按从小到大的顺序填入数组nums中,
若遍历完一个数组的值后,另一个数组的值还有,直接添加到nums数组中即可。
3.判断数组nums中值的个数为奇数还是偶数,然后返回中位数。
Java:
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] nums = new int[nums1.length + nums2.length];
merge(nums, nums1, nums2);
int l = nums.length;
if(l % 2 == 0) {
return (nums[(l - 1)/2] + nums[l/2]) /2.0;
} else {
return nums[l/2] * 1.0;
}
}
public void merge(int[] nums, int[] nums1, int[] nums2) {
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(i < nums1.length) {
nums[k++] = nums1[i++];
}
while(j < nums2.length) {
nums[k++] = nums2[j++];
}
}
京公网安备 11010502036488号