LeetCode_4——寻找两个有序数组的中位数
题目
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
解法一
思路
在不考虑时间复杂度的情况下
步骤
- 首先将nums1,nums2放在同一个数组中进行排序
- 再将数组进行排序
- 若是奇数,则默认中位数位中间数,偶数则两数之商
public static double findMedianSortedArrays(int[] nums1, int[] nums2) { double num=0; //将nums1和nums2放入数组arrs中 int length=nums1.length+nums2.length; int[] arrs=new int[length]; for (int i=0;i <nums1.length ; i++) { arrs[i]=nums1[i]; } int a; int b; int c=arrs.length-nums1.length; for(a=1, b=0;a<=c&&b<nums2.length;a++,b++) { int d=arrs.length-a; arrs[d]=nums2[b]; } for (int i=0;i<arrs.length;i++){ for (int j=i+1;j<arrs.length;j++){ if (arrs[i] > arrs[j]){ int tmp = arrs[i]; arrs[i] = arrs[j]; arrs[j] = tmp; } } } int index=arrs.length/2; //取中位数 if(arrs.length%2==0){ //取余得0则为偶数 num=(double) (arrs[index]+arrs[index-1])/2; System.out.println(arrs[index]+"+"+arrs[index-1]); }else { num=(double) arrs[index]; System.out.println(arrs[index]); } return num; }