この記事では、最初の公開番号「アルゴリズムを学ぶ5分」に登場した、されLeetCode示す一連の記事の一つ。
ウェブサイト:www.cxyxiaowu.com
二つの数字:タイトルはLeetCodeまず第1の問題から来ています。アイテムの難易度は簡単、45.8パーセントの現在の合格率です。
タイトル説明
整数の配列を考えるnums
と、目標値をtarget
、あなたは配列にすることを目標値を見つける2つの整数、およびその配列の添字に戻ります。
あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。
例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
复制代码
分析タイトル
問題を解決するためにルックアップテーブルを使用します。
マップは、レコードのインデックスコンテナ要素の値を記録し、その後アレイNUMSを通してように設けられています。
- 各反復に目標値との差の現在の値を補完保存するために一時的な変数を使用する場合と、
- 検索は、私が返され、現在の変数の値を見つけるために成功した値の指標であれば、そこに一貫性があると値を補完するかどうかを確認し、トラバースのレコードを探します
- 見つからない場合、レコードとは、要素のインデックスを保存I
アニメーションの説明
コードの実装
// 1. Two Sum
// https://leetcode.com/problems/two-sum/description/
// 时间复杂度:O(n)
// 空间复杂度:O(n)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> record;
for(int i = 0 ; i < nums.size() ; i ++){
int complement = target - nums[i];
if(record.find(complement) != record.end()){
int res[] = {i, record[complement]};
return vector<int>(res, res + 2);
}
record[nums[i]] = i;
}
}
};
复制代码
ます。https://juejin.im/post/5cef814151882503050eddddで再現