NC 在两个长度相等的排序数组中找到上中位数

系列文章目录



前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


描述
给定两个递增数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。
上中位数:假设递增序列长度为n,为第n/2个数
在这里插入图片描述
在这里插入图片描述

import java.util.*;
public class Solution {
    public int findMedianinTwoSortedAray (int[] arr1, int[] arr2) {
        int len1 = arr1.length;
        int len2 = arr2.length;
        // 假设两个数组为一个数组,先算出上中位数的位置。
        int mid_index = (len1+len2)%2 == 0?(len1+len2)/2 : (len1+len2)/2 +1;
        // 记录走过的次数
        int index= 0;
        // 存放最新的走过的值
        int res = arr1[0];
        // 两个指针指向数组的起点
        int index1 = 0, index2 = 0;
        // 当两个数组没走完的时候
        while(index1 < len1 && index2 < len2){
            // 小的则放进res中
            if(arr1[index1] <= arr2[index2]){
                res = arr1[index1];
                // 指针往下移
                index1++;
            }else{
                res = arr2[index2];
                // 指针往下移
                index2++;
            }
            // 当总的次数等于 ==原来假设两个数组为一个数组,算出的上中位数的位置时,则证明res为上            
            // 中位数,直接返回
            if(index == mid_index-1)
                return res;
            // 走一次,次数+1
            index++;
        }
        // 当arr2走完的时候,arr1还没走完,此时上中位数则在arr1中
        if(index != mid_index-1 && index1 < len1){
            // mid_index-1-index为index1离上中位数的距离,所以直接定位到上中位数
            return arr1[index1 + mid_index-1-index];
        //当arr1走完的时候,arr2还没走完,此时上中位数则在arr2中
        }else{
            // mid_index-1-index为index2离上中位数的距离,所以直接定位到上中位数
            return arr2[index2 + mid_index-1-index];
        }

    }
}

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java毕设王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值