求兩個正序陣列的中位數 求第K小的數字

2021-10-10 15:58:09 字數 1044 閱讀 1865

給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。

高階:你能設計乙個時間複雜度為 o(log (m+n)) 的演算法解決此問題

class

solution

while

(n >0)

nums[m+n-1]

= nums2[

--n]

;while

(m >0)

nums[m+n-1]

= nums1[

--m];if

(nums.length %2!=

0)result = nums[nums.length/2]

;else

result =

(double

)(nums[nums.length/2]

+ nums[nums.length/2-

1])/

2;return result;

}}

時間複雜度是 o(m+n),空間複雜度是 o(m+n)

class

solutionif(

((m+n)&1

)==0)

return

(pre + mid)

/2.0

;else

return mid;

}}

時間複雜度:遍歷 len/2+1 次,len=m+n,所以時間複雜度依舊是 o(m+n)。

空間複雜度: o(1)

class

solution

}private

double

getkthelement

(int

nums1,

int[

] nums2,

int astart,

int bstart,

int k)

}

求兩個排序陣列的中位數

設x 1.n 和y 1.n 為兩個陣列,每個都包含n個已排序好的數。給出乙個求陣列x和y中所有2n個元素的中位數的 o lgn 時間的演算法。演算法思想 該演算法類似於二分查詢演算法 1.兩個陣列中小於median的個數為 n 1 個,假設該median為陣列a中的第k個,k為陣列下標,那麼在陣列a...

求兩個有序陣列的中位數

要求 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 例如 nums1 1,3 nums2 2 則中位數是 2.0 nums1 1,2 nums2 3,4 則中位數是 2 3 2 2.5 演算法解析...

求兩個有序陣列的中位數

原部落格 設陣列a的長度為m,陣列b的長度為n,兩個陣列都都是遞增有序的。求這兩個陣列的中位數 首先我們看看中位數的特點,乙個大小為n的陣列,如果n是奇數,則中位數只有乙個,陣列中恰好有 n 1 2 個元素比中位數小。如果n是偶數,則中位數有兩個 下中位數和上中位數 這裡我們只求下中位數,對於下中位...