0
点赞
收藏
分享

微信扫一扫

【LeeCode】4. 寻找两个正序数组的中位数

鲤鱼打个滚 2022-12-17 阅读 189

【题目描述】

给定两个大小分别为 ​​m​​​ 和 ​​n​​​ 的正序(从小到大)数组 ​​nums1​​​ 和 ​​nums2​​。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 ​​O(log (m+n))​​ 

​​​​​​​​​https://leetcode.cn/problems/median-of-two-sorted-arrays/description/​​


【示例】

【LeeCode】4. 寻找两个正序数组的中位数_java

【代码】admin

import java.util.*;
// 2022-12-17

class Solution {

public double findMedianSortedArrays(int[] num1, int[] num2) {
double res = 0d;

// 考虑特殊情况
if (num1.length == 0 && num2.length == 0){
return res;
} else if (num1.length == 1 && num2.length == 0){
return num1[0];
} else if (num1.length == 0 && num2.length == 1) {
return num2[0];
}
// 因为本身数组都是正序的,这里进行合并
int[] sum = new int[num1.length + num2.length];
System.arraycopy(num1, 0, sum, 0, num1.length);
System.arraycopy(num2, 0, sum, num1.length, num2.length);
// 合并后的数组进行排序
Arrays.sort(sum);

if (sum.length % 2 == 0){
// 如果是偶数, 则mid取中间2数的均值
int left = sum.length / 2;
int right = sum.length / 2 + 1;
res = (double) (sum[left - 1] + sum[right - 1]) / 2;
}else {
// 如果是奇数, 取中间值
int mid = sum.length / 2 + 1;
res = sum[mid - 1];
}
// // System.out.println(res);
return res;
}
}

public class Main{
public static void main(String[] args) {
int[] arr = {3};
int[] arr1 = {-2, -1};
new Solution().findMedianSortedArrays(arr, arr1);
}
}




举报

相关推荐

0 条评论