給定乙個整數陣列 nums 和乙個目標值 target,在該陣列中找出和為目標值的那兩個整數,並返回它們的陣列下標。
假設每種輸入只會對應乙個答案,但是不能重複利用這個陣列中同樣的元素。
給定 nums = [2, 7, 11, 15],target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]
class
solution
(object)
: def twosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
""" for i in
range
(len
(nums)):
for j in
range
(i+1
,len
(nums)):
if(nums[i]
+ nums[j]
)== target:
return
[i,j]
return none
給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。
函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。
說明:返回的下標值(index1 和 index2)不是從零開始的。
假設每個輸入只對應唯一的答案,而且不可以重複使用相同的元素。
輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等於目標數 9 。因此 index1 = 1, index2 = 2 。
解答1
class
solution
(object)
: def twosum
(self, numbers, target)
:"""
:type numbers: list[int]
:type target: int
:rtype: list[int]
""" for i in
range(0
,len
(numbers)):
rest = target-numbers[i]
numbers_rest = numbers[i+1:
]if rest in numbers_rest:
return
[i+1
,numbers_rest.
index
(rest)
+i+2
] # numbers_rest.
index
(rest)
+i+1是rest在numbers裡的索引
return none
遍歷列表,對當前數numbers[i],判斷target-numbers[i]是否在剩下的列表元素內。
這一方法時間複雜度太高,for迴圈遍歷列表o(n),判斷元素是否在列表內o(n),查詢索引o(n),整個演算法o(n^3)
解答2 利用雙指標
class
solution
(object)
: def twosum
(self, numbers, target)
:"""
:type numbers: list[int]
:type target: int
:rtype: list[int]
""" # 有序陣列
l =0 r =
len(numbers)-1
while lif numbers[l]
+numbers[r]
==target:
return
[l+1
,r+1
] elif numbers[l]
+numbers[r]
>target:
r -=
1else
: l +=
1return none
力扣刷題記錄 陣列 簡單 896單調數列
如果陣列是單調遞增或單調遞減的,那麼它是單調的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞增的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞減的。當給定的陣列 a 是單調陣列時返回 true,否則返回 false。class solution object def ...
力扣刷題記錄05
題目分類 二分查詢 時間 2020 09 09 題目一 兩數之和 兩數之和 ii 輸入有序陣列 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 ind...
力扣刷題記錄2
第一題是每日一題的簡單題。需要記的並不多,一是用迭代器對vector的一些基本操作。可以參考這裡 for vector iterator iter num.begin iter num.end iter 另外是快排的思想。這種思想實用性很廣,即使不需要排序,在找出最大的k個數,對陣列進行分割 以中間...