4. Median of Two Sorted Arrays
Given two sorted arrays nums1
and nums2
of size m
and n
respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n))
.
Example 1:
Input: nums1 = [1,3], nums2 = [2] Output: 2.00000 Explanation: merged array = [1,2,3] and median is 2.
Example 2:
Input: nums1 = [1,2], nums2 = [3,4] Output: 2.50000 Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
public static double findMedian(int[] A, int[] B) {
int lenA = A.length;
int lenB = B.length;
int totalLen = lenA + lenB;
if (totalLen % 2 == 1)
return helper(A, 0, lenA, B, 0, lenB, totalLen / 2 + 1);
else {
int var1 = helper(A, 0, lenA, B, 0, lenB, totalLen / 2);
int var2 = helper(A, 0, lenA, B, 0, lenB, totalLen / 2 + 1);
return (double)(var1 + var2) / 2;
}
}
private static int helper(int[] A, int beginA, int lenA, int[] B, int beginB, int lenB, int k) {
if (lenA > lenB)
return helper(B, beginB, lenB, A, beginA, lenA, k);
if (lenA == 0)
return B[beginB + k - 1];
if (k == 1)
return Math.min(A[beginA], B[beginB]);
int ma = Math.min(lenA, k / 2);//把k分成两部分
int mb = k - ma;
if (A[beginA + ma - 1] < B[beginB + mb - 1])
return helper(A, beginA + ma, lenA - ma, B, beginB, lenB, k - ma);//把A数组前面ma个元素去掉
else if (A[beginA + ma - 1] > B[beginB + mb - 1])
return helper(A, beginA, lenA, B, beginB + mb, lenB - mb, k - mb);//把B数组前面mb个元素去掉
else
return A[beginA + ma - 1];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix