[打卡12:leetcode4. 寻找两个正序数组的中位数] |刷题打卡

330 阅读1分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

前言

第一次参加掘金打卡活动,别的不说 主要是奔着奖励来的。4.12开始为了达到14题小目标 冲冲冲!!!这是第12题。

image.png

题目描述

题目链接:寻找两个正序数组的中位数

题目描述我用截图leetcode的为主,所以题目如下图

image.png

思路分析

一看见题目我的想法是合并两个数组然后重新排序,得到一个合并后的正序数组,然后写个方法可以求得正序数组的中位数,依题长度为1直接返回 长度大于2的话分奇数/偶数两种情况

  • 奇数:返回最中间的数(下标为Math.floor(lenth/2))
  • 偶数:返回最中间两位数之和的平均数(下标分别是length/2-1和length/2) 理清思路直接开撸:

image.png

虽然依照这个思路是可行的但是用时长消耗空间大。 想了一会儿,一时也没想到好的优化方法,所以去看了一下别人思路参考一下: 看见下面这个求第K小数的解法的思路真的是秒。第K image.png

AC 代码

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function(nums1, nums2) {
    // 先写一个非空正序数组求中位数的方法
    var getMid=(arr)=>{
        if(arr.length===1){
            return arr[0]
        }
        if(arr.length%2===0){
            let index=arr.length/2
            return (arr[index-1]+arr[index])/2
        }else{
            let index=Math.floor(arr.length/2)
            return arr[index]
        }
    }
    let newArr=[...nums1,...nums2]
    newArr.sort((a,b)=>{
        return a-b
    })
    return getMid(newArr)
};

总结

坚持就是胜利。第12题算法完成,坚持就是胜利!!!

       ↓↓↓

算法系列链接

       ↑↑↑

这里可以点!这里可以点!这里可以点!