LeetCode 04 尋找兩個正序陣列的中位數

2021-10-11 02:56:50 字數 3841 閱讀 2398

這題上去就看到困難難度,有點慌。分析一波後感覺也不是很難啊。然後一波操作猛如虎,一看戰績0槓5

這個第一次解答錯誤是我以為set集合會自動排序,但是當有負數的時候set集合出現了錯誤。第二次錯誤我才明天這個題的意思。

最開始的理解是兩個陣列合併後要去掉重複元素,結果發現並不是這樣,而是直接拼接,這就很尷尬,畢竟五個例子都沒有體現出這一點。

可能就是這題困難的原因(小聲bb)。

那麼先給我自己寫的去掉重複元素找中位數的**

class

solution

:def

findmediansortedarrays

(self, nums1: list[

int]

, nums2: list[

int])-

>

float

: se=

set(nums1+nums2)

length=

len(se)

if length==0:

return

0 a=

list

(se)

a.sort(

)if length%2==

0:num=

(a[int

(length/2)

-1]+a[

int(length/2)

])/2

else

: num=a[

int(

(length-1)

/2)]

return num

然後我發現更加簡單了,這題不能名不符實

class

solution

:def

findmediansortedarrays

(self, nums1: list[

int]

, nums2: list[

int])-

>

float

: a=

list

(nums1+nums2)

length=

len(a)

a.sort(

)if length%2==

0:num=

(a[length//2-

1]+a[length//2]

)/2else

: num=a[length//2]

return num

效果好像也是還行的,至於時間複雜度的話應該會集中在排序上。具體的時間複雜度我也不知道啊。

人外有人,天外有天。還以為是o(m+n),原來是o(log (m+n))。

又學到了二分查詢,強

python**

class

solution

:def

findmediansortedarrays

(self, nums1: list[

int]

, nums2: list[

int])-

>

float

:def

getkthelement

(k):

""" - 主要思路:要找到第 k (k>1) 小的元素,那麼就取 pivot1 = nums1[k/2-1] 和 pivot2 = nums2[k/2-1] 進行比較

- 這裡的 "/" 表示整除

- nums1 中小於等於 pivot1 的元素有 nums1[0 .. k/2-2] 共計 k/2-1 個

- nums2 中小於等於 pivot2 的元素有 nums2[0 .. k/2-2] 共計 k/2-1 個

- 取 pivot = min(pivot1, pivot2),兩個陣列中小於等於 pivot 的元素共計不會超過 (k/2-1) + (k/2-1) <= k-2 個

- 這樣 pivot 本身最大也只能是第 k-1 小的元素

- 如果 pivot = pivot1,那麼 nums1[0 .. k/2-1] 都不可能是第 k 小的元素。把這些元素全部 "刪除",剩下的作為新的 nums1 陣列

- 如果 pivot = pivot2,那麼 nums2[0 .. k/2-1] 都不可能是第 k 小的元素。把這些元素全部 "刪除",剩下的作為新的 nums2 陣列

- 由於我們 "刪除" 了一些元素(這些元素都比第 k 小的元素要小),因此需要修改 k 的值,減去刪除的數的個數

"""index1, index2 =0,

0while

true

:# 特殊情況

if index1 == m:

return nums2[index2 + k -1]

if index2 == n:

return nums1[index1 + k -1]

if k ==1:

return

min(nums1[index1]

, nums2[index2]

)# 正常情況

留下乙個疑問:時間複雜度與空間複雜度的直觀反映不就是通過執行時間與記憶體消耗來體現。是這樣嗎?

許可權&免責&交流宣告

leetcode04 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

leetcode 04 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

LeetCode 04尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2...