給定乙個整數陣列 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...