首先呢我也声明一番,我是第一次写博客很多地方有些问题和不对的对方还望各位能批评指正。今天我去LeetCode上看到了一道归属于困难的算法题,与我尝试解答了一下,经过几番调式和思考我写出了一段代码。下面是算法题的图和我写的代码:
import java.util.Arrays;
public class ArrayMedian {
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
double result=0.0;
int[] arr=new int[nums1.length+nums2.length];
for (int i=0;i<nums2.length;i++){
arr[i]=nums2[i];
}
for (int i=nums2.length,j=0;i<arr.length;i++){
arr[i]=nums1[j];
j++;
}
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
if (arr.length%2==0){
result= (double) (arr[(arr.length / 2)-1] + arr[(arr.length / 2 + 1)-1] )/ 2;
}else {
result=arr[((arr.length+1)/2)-1];
}
return result;
}
public static void main(String[] args) {
double medianSortedArrays = findMedianSortedArrays(new int[]{1,45, 8,7,26,78,98,5, 6}, new int[]{2, 3, 9});
System.out.println(medianSortedArrays);
}
}
我的解题思路是:在堆中新开辟一个数组对象,将两个数组的元素全部加入新数组中,再将他们排序好,最后去中位数就简单了。一个简单的if判断就可以完成了,上机调试也是成功的,最后也成功提交了。
虽然是成功了(进阶部分没有说明),但是我这种方法有点浪费内存,并不是一个好方法,期待各位给出更好的方法,欢迎各位在评论留言与交流!