系列文章目录
前言
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
描述
给定两个递增数组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];
}
}
}