説明
整数配列NUMSと目標値の目標を考えると、配列内の2つの整数の目標値を特定し、その配列の添字に戻すように頼みます
例として
与えられたNUMS = [2、7、11 、15]、目標= 9
ためNUMS [0] + NUMS [1 ] = 2 + 7 = 9
返される[0,1]
思考
- 暴力:二つのループのために
- 強化された方法(より便利に、その添字を返すために必要に応じて、O(n)を推奨):見つけるために、辞書を使用してO(1)であります
{番号が必要:私は誰だ}各番号を通じて、私は必要ないんだ場合、私は辞書に書いた私のニーズを入れて行きました
- 第三の方法(O(nlogn):最初の二つのポインタを使用して、各数、並び替えO(nlogn)の添字セーブ(ソート既知である必要があり、ターゲットは、以下の目標よりも大きいポインタが移動)へ
の回答 - パイソン
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
# {需要的差值:index}
d={}
for i in range(len(nums)):
if d.get(nums[i]) is not None: #第二个参数不写,默认返回None,注意返回0时,也会被当作false
return [d.get(nums[i]), i]#i会比较大
else:
d[target-nums[i]]=i
return []
- C ++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> m;
for (int i=0; i<nums.size(); i++)
if (m.find(nums[i])!=m.end())
return {m[nums[i]], i};
else
m[target-nums[i]]=i;
return {};
}
};