题目
思路
重写了下官方题解的代码
代码
class Solution {
func getKthElement(nums1: Array<Int64>, nums2: Array<Int64>, k: Int64){
var m = nums1.size
var n = nums2.size
var index1 = 0
var index2 = 0
var kk = k
while(true){
if(index1 == m){
return nums2[index2+kk-1]
}
if(index2 == n){
return nums1[index1+kk-1]
}
if(kk==1){
return min(nums1[index1], nums2[index2])
}
var newIndex1 = min(index1 + kk/2-1,m-1)
var newIndex2 = min(index2 + kk/2-1,n-1)
var pivot1 = nums1[newIndex1]
var pivot2 = nums2[newIndex2]
if(pivot1 <= pivot2){
kk-=newIndex1 - index1+1
index1 = newIndex1+1
}
else{
kk-=newIndex2-index2+1
index2=newIndex2+1
}
}
return 0
}
func findMedianSortedArrays(nums1: Array<Int64>, nums2: Array<Int64>): Float64 {
let len = nums1.size + nums2.size
if(len % 2 == 1){
return Float64(getKthElement(nums1, nums2, (len+1)/2) )
}
return Float64(getKthElement(nums1, nums2, len/2) + getKthElement(nums1,nums2, len/2+1))/2.0
}
}
复杂度
时间复杂度
O(log(m+n))
,其中 m 和 n 分别是数组 nums1 和 nums2 的长度。初始时有 k=(m+n)/2
或 k=(m+n)/2+1
,每一轮循环可以将查找范围减少一半,因此时间复杂度是 O(log(m+n))
。
空间复杂度
O(1)
遇到的坑
逻辑题,没啥语言上的坑
结果
CPP
仓颉在内存上比cpp少很多