力扣第四题 4. 寻找两个正序数组的中位数

好玩好耍 题目连接 ==》  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;
        }
    }
}

总结

好看好学,你们觉得假面骑士最近三年的好看嘛??

你可能感兴趣的:(笨小林做力扣,leetcode,算法,java,力扣,开发语言)