
关注
给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数。
例如:
arr1 = {1,2,3,4};
arr2 = {3,4,5,6};
一共8个数则上中位数是第4个数,所以返回3。
arr1 = {0,1,2};
arr2 = {3,4,5};
一共6个数则上中位数是第3个数,所以返回2。
要求:时间复杂度O(logN)
public static int getUpMedian(int[] arr1, int[] arr2) {
if (arr1 == null || arr2 == null || arr1.length != arr2.length) {
throw new RuntimeException("Your arr is invalid!");
}
return findProcess(arr1, 0, arr1.length - 1, arr2, 0, arr2.length - 1);
}
public static int findProcess(int[] arr1, int start1, int end1, int[] arr2,
int start2, int end2) {
if (start1 == end1) {
return Math.min(arr1[start1], arr2[start2]);
}
// 元素个数为奇数,则offset为0;元素个数为偶数,则offset为1;
int offset = ((end1 - start1 + 1) & 1) ^ 1;
int mid1 = (start1 + end1) / 2;
int mid2 = (start2 + end2) / 2;
if (arr1[mid1] > arr2[mid2]) {
return findProcess(arr1, start1, mid1, arr2, mid2 + offset, end2);
} else if (arr1[mid1] < arr2[mid2]) {
return findProcess(arr1, mid1 + offset, end1, arr2, start2, mid2);
} else {
return arr1[mid1];
}
}
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享


点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
35058次浏览 535人参与
# 工作一周年分享 #
15931次浏览 104人参与
# 京东TGT #
37056次浏览 158人参与
# 入职第五天,你被拉进了几个工作群 #
14941次浏览 79人参与
# 面试经验谈 #
23222次浏览 349人参与
# 假如我穿越到了妈妈的18岁 #
2529次浏览 32人参与
# 机械人,你的第一份感谢信是谁给的 #
23992次浏览 295人参与
# 面试吐槽bot #
6527次浏览 55人参与
# 零跑求职进展汇总 #
2704次浏览 16人参与
# 视觉/交互/设计招聘信息汇总 #
11430次浏览 596人参与
# 职场捅娄子大赛 #
266976次浏览 2387人参与
# 上班苦还是上学苦呢? #
215544次浏览 1288人参与
# 职场新人生存指南 #
340063次浏览 7275人参与
# 国企vs私企,你更想去? #
213853次浏览 2037人参与
# 异地恋该为对方跳槽吗 #
28536次浏览 143人参与
# 硬件人秋招的第一个offer #
67632次浏览 1083人参与
# 请用你的专业向妈妈表白 #
5404次浏览 56人参与
# 硬件人更看重稳定还是高薪 #
43066次浏览 216人参与
# 机械求职避坑tips #
43048次浏览 356人参与
# 对妈妈没说出口的话 #
15850次浏览 364人参与
# 妈妈治愈了你哪些脆皮时刻 #
7270次浏览 119人参与