4. 寻找两个正序数组的中位数
寻找两个正序数组的中位数
题目描述:
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例 3:
输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例 4:
输入:nums1 = [], nums2 = [1]
输出:1.00000
思路:
最简单的思路
代码:
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
flag := 0
if (len(nums1)+len(nums2)) % 2 ==1{
flag = 0
}else{
flag = 1
}
mid := (len(nums1)+len(nums2))/2
nums := make([]int, len(nums1)+ len(nums2))
var i,j int
for i ,j = 0,0;i<len(nums1) && j <len(nums2);{
if nums1[i] < nums2[j]{
nums[i+j] = nums1[i]
i++
}else{
nums[i+j] = nums2[j]
j++
}
}
if i == len(nums1) && j<len(nums2){
for ;j<len(nums2);j++{
nums[i+j] = nums2[j]
}
}
if j == len(nums2) && i <len(nums1){
for ;i<len(nums1);i++{
nums[i+j] = nums1[i]
}
}
if len(nums) == 0{
return 0
}
if flag == 0{
return float64(nums[mid])
}else{
return (float64(nums[mid])+float64(nums[mid-1]))/2
}
}
代码效率:
执行用时:12 ms, 在所有 Go 提交中击败了88.16%的用户
内存消耗:5.4 MB, 在所有 Go 提交中击败了41.09%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!