LeetCode刷題之旅(Day4)

2021-09-16 14:08:06 字數 1412 閱讀 9931

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。

請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。

你可以假設 nums1 和 nums2 不會同時為空。

示例 1:

nums1 = [1, 3]

nums2 = [2]

則中位數是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

則中位數是 (2 + 3)/2 = 2.5

解題思路:

我首先想的是建立乙個新的陣列,每次比較nums1和nums2 的頭,pop掉小的並加到新陣列裡,做兩陣列長度/2 次。最後返回新陣列的最後一位(或者後兩位的平均數,但是時間複雜度不符合要求

class solution:

def findmediansortedarrays(self, nums1: list[int], nums2: list[int]) -> float:

if not nums1:

if len(nums2)%2==0:

return (nums2[int(len(nums2)/2-1)]+nums2[int(len(nums2)/2)])/2.0

else:

return nums2[math.floor(len(nums2)/2)]/1.0

if not nums2:

if len(nums1)%2==0:

return (nums1[int(len(nums1)/2)-1]+nums1[int(len(nums1)/2)])/2.0

else:

return nums1[math.floor(len(nums1)/2)]/1.0

length_of_1=len(nums1)

length_of_2=len(nums2)

totallength =length_of_2+length_of_1

if totallength%2==0:

n=2limit=totallength/2 + 1

else:

n=1limit=totallength/2

times=0

ans=

while timesnums2[0]:

else:

elif not nums1 and nums2:

elif not nums2 and nums1:

times+=1

if n==1:

return ans[-1]/1.0

else:return (ans[-1]+ans[-2])/2.0

因此我借鑑了題解 尋找兩個有序陣列的中位數

leetcode刷題之旅(day1)

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

Leetcode刷題之旅(Day2)

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...

LeetCode刷題之旅(Day5)

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解題思路 我們觀察到回文中心的兩側互為映象。因此,回文可以從它的中心展開,並且只有 2n 12n 1 ...