好玩好耍 题目连接 ==》 4. 寻找两个正序数组的中位数 好看好学!!!
目录
前言
嗯呐,这道题不难!!!,第一次做这道题的时候是在2022年10月29日,当时没做出来,看了下,代码的行数,真长,当时是怎么想这道题的?我也不知道,况且当时还没做出来。今天重新看了这道题,感觉好简单的,反正在我看来,不应该是个困难的题目,可能这大半年有所成长吧!!
一、题目解析
这道题的话,是给你两个有序的数组,让你返回这两个数组合并后的中位数。
如果是这样的话,真不难,直接创建一个新的数组,数组的长度是两个数组的加起来的长度,然后用for循环将两个数组放到这个新的数组中,运用Arrays.sort() 方法进行排序,然后找出中文数。
但是只是上面这种方法并不能满足我所想的解法,做的时候我在想,能不能不合并数组找出里面的中位数,代码附下。这种做法,是使用for循环去定位到两个数组合并后中间位置上的那个值。具体思路的话,我想你们看到代码就知道了!!!
二、代码
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
// 获取中位数应该对应的是第几个
int k = (m+n)/2;
// 这两个个用来记录当前值和上一个值,因为如果两个数组的长度相加为偶数的话,则将中间的两个值 相加除二
int a = 0,b=0;
for(int i = 0,j = 0;i+j<=k;){
// a 记录上一个值
a = b;
if(i < m && (j >= n || nums1[i] < nums2[j])){
b = nums1[i];
i++;
}else{
b = nums2[j];
j++;
}
}
// n + m 为偶数的情况
if((m+n)%2 == 0){
return (a + b)/2.0;
}else{
return b;
}
}
}
总结
好看好学,你们觉得假面骑士最近三年的好看嘛??