給定乙個整數數列,找出其中和為特定值的那兩個數。
你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。
示例:
給定 nums = [2, 7, 11, 15], target = 9因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
step 1:
class solution(object):
def twosum(self, nums, target):
"""
:type nums: list[int]
:type target: int
:rtype: list[int]
"""list_len = len(nums)
for i in range(list_len):
for j in range(i+1,list_len):
if nums[i] + nums[j] == target:
return [i,j]
q:最後乙個測試用例會超時,窮舉法,迴圈了兩次,時間複雜度o(n*n)
step2:這裡是先生成乙個雜湊表(字典),然後迴圈過程中判斷當前元素和雜湊表(字典)中的資料相加是否滿足條件,
遍歷nums,遍歷過程中判斷當前元素和雜湊表(字典)中的值相加能不能滿足要求,也就是target-當前元素的值在雜湊表(字典)中是否存在,如果存在,就返回2個索引(注意是return[**,index]),如果不存在,那麼當前元素存入雜湊表(字典)。
class solution:
def twosum(self, nums, target):
""":type nums: list[int]
:type target: int
:rtype: list[int]
"""dic = dict()
for index,value in enumerate(nums):
sub = target - value
if sub in dic:
return [dic[sub],index]
else:
dic[value] = index
筆記:1、
twosum函式的呼叫:
s = solution()
print s.twosum([3,2,4], 6)
2、
enumerate的用法:
enumerate()是python的內建函式,enumerate在字典上是列舉、列舉的意思
對於乙個可迭代的(iterable)/可遍歷的物件(如列表、字串),enumerate將其組成乙個索引序列,利用它可以同時獲得索引和值
例如:nums = [2, 7, 11, 15]
for index, value in enumerate(nums):
print index, value
>>>
0 21 7
2 11
3 15
from:
leetcode 1 兩數之和
1.兩數之和 這道題和程式設計之法上面的題目有以下幾個不同 1 題目所給定的陣列是無序的,程式設計之法裡面是預設有序的 2 要求輸出原陣列的序號,如果用乙個結構體維護陣列下標,那麼需要o n 的空間,顯然不是最好的方法 3 題目中包含負數,之前想用數值直接表示陣列下標,陣列值為原來的真正陣列下標,但...
leetcode 1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 class solution for int i 0 ...
leetcode1 兩數之和
public int twosum int nums,int target return result else private static boolean checknum int nums,int target,listlist,int size,boolean issum if issum ...