题解 | #牛的体重排序#
牛的体重排序
https://www.nowcoder.com/practice/1afd5afef2aa49a8a39b63bb9d2821f9
- 题目考察的知识点 : 二分,分而治之
- 题目解答方法的文字分析:
- 首先找出两个牛群各自的中位数,分别为nums1[i-1]和nums2[j-1]。然后根据中位数的定义比较nums1[i-1]和nums2[j]以及nums2[j-1]和nums1[i]的大小关系。
- 如果nums1[i-1]大于nums2[j],则说明中位数位于nums1[0:i-1]和nums2[j:n]之间,可以将搜索范围缩小到[imin, i-1]区间内继续查找;
- 如果nums2[j-1]大于nums1[i],则说明中位数位于nums1[i:m]和nums2[0:j-1]之间,因此我们将搜索范围缩小到[i+1, imax]区间内继续查找;
- 否则,a和b就是中位数,返回(a+b)/2即可
- 本题解析所用的编程语言:Python
- 完整且正确的编程代码
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param weightsA int整型一维数组
# @param weightsB int整型一维数组
# @return double浮点型
#
class Solution:
def findMedianSortedArrays(self, weightsA: List[int], weightsB: List[int]) -> float:
m, n = len(weightsA), len(weightsB)
if m > n:
weightsA, weightsB, m, n = weightsB, weightsA, n, m
imin, imax, half_len = 0, m, (m + n + 1) // 2
while imin <= imax:
i = (imin + imax) // 2
j = half_len - i
if j > 0 and i < m and weightsB[j-1] > weightsA[i]:
imin = i + 1
elif i > 0 and weightsA[i-1] > weightsB[j]:
imax = i - 1
else:
if i == 0: max_of_left = weightsB[j-1]
elif j == 0: max_of_left = weightsA[i-1]
else: max_of_left = max(weightsA[i-1], weightsB[j-1])
if (m + n) % 2 == 1:
return max_of_left
if i == m: min_of_right = weightsB[j]
elif j == n: min_of_right = weightsA[i]
else: min_of_right = min(weightsA[i], weightsB[j])
return (max_of_left + min_of_right) / 2.0
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路

海康威视公司福利 1097人发布