给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
一时间没有想到比较好的优化方法,所以只能采用暴力法
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
double m = 0.0;
List<Integer> num1 = new ArrayList<>();
List<Integer> num2 = new ArrayList<>();
for (int i = 0; i < nums1.length; i++) {
num1.add(nums1[i]);
}
for (int i = 0; i < nums2.length; i++) {
num2.add(nums2[i]);
}
if ((!num1.isEmpty()) && (!num2.isEmpty())){
for (int i = 0; i < num2.size(); i++) {
int j=0;
while (num2.get(i) >= num1.get(j)){
j++;
if (j == num1.size()){
break;
}
}
num1.add(0);
if (j != num1.size()){
for (int k = num1.size()-1; k > j; k--) {
num1.set(k, num1.get(k-1));
}
}
num1.set(j, num2.get(i));
}
}else {
if (num1.isEmpty()){
num1.addAll(num2);
}
}
if (num1.size() % 2 == 0){
m = ((double)num1.get(num1.size()/2-1)+num1.get(num1.size()/2))/2;
}else {
m = num1.get(num1.size()/2);
}
return m;
}
}
问题:
1.虽然结果通过了,但是时间复杂度过高
2.而且方法的输入一开始没看到是数组类型的,结果自己选择了链表的数据结构
标准答案:
二分搜索
每次二分搜索时都可以删除掉一部分数据,最终剩下来的就是第k小的数,即中位数