LC刷題筆記 第一天 2 4 5(1 11)

2021-10-14 12:54:15 字數 2734 閱讀 2402

給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

輸入:nums = [3,2,4], target = 6

輸出:[1,2]

示例 3:

輸入:nums = [3,3], target = 6

輸出:[0,1]

class

solution

(object):

deftwosum

(self, nums, target)

:"""

:type nums: list[int]

:type target: int

:rtype: list[int]

"""dct =

for i, n in

enumerate

(nums)

: cp = target - n

if cp in dct:

return

[dct[cp]

, i]

else

: dct[n]

= i

解析思路:

標籤:雜湊對映

這道題本身如果通過暴力遍歷的話也是很容易解決的,時間複雜度在 o(n2)o(n2)

由於雜湊查詢的時間複雜度為 o(1)o(1),所以可以利用雜湊容器 map 降低時間複雜度

遍歷陣列 nums,i 為當前下標,每個值都判斷map中是否存在 target-nums[i] 的 key 值

如果存在則找到了兩個值,如果不存在則將當前的 (nums[i],i) 存入 map 中,繼續遍歷直到找到為止

如果最終都沒有結果則丟擲異常

時間複雜度:$$

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

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

示例 1:

輸入:nums1 = [1,3], nums2 = [2]

輸出:2.00000

解釋:合併陣列 = [1,2,3] ,中位數 2

示例 2:

輸入:nums1 = [1,2], nums2 = [3,4]

輸出:2.50000

解釋:合併陣列 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5

示例 3:

輸入:nums1 = [0,0], nums2 = [0,0]

輸出:0.00000

示例 4:

輸入:nums1 = , nums2 = [1]

輸出:1.00000

示例 5:

輸入:nums1 = [2], nums2 =

輸出:2.00000

class

solution

(object):

deffindmediansortedarrays

(self, nums1, nums2)

:"""

:type nums1: list[int]

:type nums2: list[int]

:rtype: float

"""iflen

(nums1)

>

len(nums2)

: nums1, nums2 = nums2, nums1

len1, len2 =

len(nums1)

,len

(nums2)

left, right, half_len =

0, len1,

(len1 + len2 +1)

//2mid1 =

(left + right)//2

mid2 = half_len - mid1

while left < right:

if mid1 < len1 and nums2[mid2-1]

> nums1[mid1]

: left = mid1 +

1else

: right = mid1

mid1 =

(left + right)//2

mid2 = half_len - mid1

if mid1 ==0:

max_of_left = nums2[mid2-1]

elif mid2 ==0:

max_of_left = nums1[mid1-1]

else

: max_of_left =

max(nums1[mid1-1]

, nums2[mid2-1]

)if(len1 + len2)%2

==1:return max_of_left

if mid1 == len1:

min_of_right = nums2[mid2]

第一天刷題

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

leetcode刷題筆記 第一天

題目說明 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。解題思路 首先判斷needle是否在haystack中,如果存在則返還needle所在位置。如果不存在,則返還 1。def s...

leetcode刷題第一天

給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。class solution def addtwonumbers se...