两个有序数组求第k小元素

思路:二分查找

func findKth(nums1,nums2[]int,start1,start2,k int)int{
	if start1>=len(nums1){
		return nums2[start2+k-1]
	}
	if start2>=len(nums2){
		return nums1[start1+k-1]
	}


	if k==1 {
		return int(math.Min(float64(nums1[start1]),float64(nums2[start2])))
	}


	midA:=math.MaxInt32
	midB:=math.MaxInt32
	if start1+k/2-1 <len(nums1){
		midA = nums1[start1+k/2-1]
	}
	if start2+k/2-1 <len(nums2){
		midB = nums2[start2+k/2-1]
	}


	if midA<midB{
		return findKth(nums1,nums2,start1+k/2,start2,k-k/2)
	}else {
		return findKth(nums1,nums2,start1,start2+k/2,k-k/2)
	}
}

猜你喜欢

转载自blog.csdn.net/qingxili/article/details/79949636