1. 2つの数の合計
件名の説明:
整数配列NUMSと目標値の目標を考えると、配列内の2つの整数の目標値を特定し、その配列の添字に戻るにお願いします。
あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。
試験例:
所与NUMS = [2、7、11 、15]、目標= 9
ためNUMS [0] + NUMS [1 ] = 2 + 7 = 9
返される[0,1]
開発:一般的な操作のリストの複雑辞書
- 配列
操作 | ビッグ-O |
---|---|
指数 | O(1) |
追記 | O(1) |
ポップ | O(1) |
ポップ(I) | O(N) |
挿入(I、アイテム) | O(N) |
の | O(N) |
反復 | O(N) |
/で含まれてい | O(N) |
ソート | O(N Nログ) |
かける | O(NK) |
スライスを取得 | OK) |
デルスライス | O(N) |
セットのスライス | O(N + K) |
逆 | O(N) |
CONCATENATE | OK) |
- 辞書
操作 | ビッグ-O |
---|---|
コピー | O(N) |
アイテムを取得します | O(1) |
セットアイテム | O(1) |
の | O(1) |
/で含まれてい | O(1) |
反復 | O(N) |
問題解決のアイデア:
したがって、要素が別のセット(文字列、アレイ、辞書、等)、時間及び文字列配列の複雑さはO(n)は、時間計算の辞書であるか否かが判断された場合であり、アルゴリズムの設計でO(1)、我々は、データを格納する手段として、辞書を使用するようにしてください。
次のように戻る元の質問に、私たちは主のアレイにトラバースするだけ、時間の複雑さはO(n)は、具体的な実装は、次のとおりです。
class Solution:
def twoSum(self, nums, target):
d = {} # d 的存放格式为 {数值 : 该数值的角标}
for i in range(len(nums)):
if target - nums[i] in d:
# 跳出循环条件为当前差值存在于字典中
return [d[target - nums[i]], i]
d[nums[i]] = i # 如果原数组存在相同数如 [3, 3],则将该键值更新为后一个相同数的角标
return []