思路:因为已经有序,所以只需要先合并两个数组,然后找出中位数即可,时间复杂度为O(M+N)
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
# 归并排序合并数组(已经有序所以直接归并)
nums3 = []
idx1, idx2 = 0, 0
while idx1 < len(nums1) and idx2 < len(nums2):
a, b = nums1[idx1], nums2[idx2]
if a <= b:
nums3.append(a)
idx1 += 1
else:
nums3.append(b)
idx2 += 1
nums3 += nums1[idx1:]
nums3 += nums2[idx2:]
print(nums3)
# 找到中位数并返回
len_temp = len(nums3)
return nums3[len_temp//2] if len_temp%2!=0 else (nums3[(len_temp//2)-1]+nums3[len_temp//2])/2
解法:(二分查找)
需要注意的点,mid 直接设置就好,不用管长度的奇偶(后面只要保持left <= right 就好);该数如果不在数组中,那么最后返回 left (如果数字不存在,left最后肯定会移动到合适的插入位置)
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left,right = 0,len(nums)-1
while left <= right:
mid = (left+right)//2
if target == nums[mid]:
return mid
elif target < nums[mid]:
right = mid-1
else:
left = mid + 1
return left
关于二分查找的详解与链接,很重要自己有时间一定要看,可以加深理解
在这里插入代码片