leetcodeの2数の和c++解法
2076 ワード
leetcodeの2数の和c++解法方法一:暴力法 メソッド2:2パスハッシュテーブル 方法3:一次ハッシュテーブル 整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.
入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.
例:
方法1:暴力法
各要素xを巡り、target-xに等しい値のターゲット要素が存在するかどうかを検索します.時間複雑度:各要素に対して配列の残りの部分を遍歴して対応するターゲット要素を探そうとすると、O(n)の時間がかかり、n要素なので時間複雑度はO(n 2)である.空間複雑度:O(1).
方法2:2パスハッシュテーブル
最初の反復:各要素の値とインデックスをテーブルに追加します.2回目の反復:各要素に対応するターゲット要素(target-nums[i])がテーブルに存在するかどうかを確認します.時間複雑度:n個の要素を含むリストを2回遍歴し,ハッシュテーブルの検索時間はO(1)であるため,時間複雑度はO(n)である.空間複雑度:必要な余分な空間は、ハッシュ・テーブルに格納されている要素の数に依存し、このテーブルにはn要素が格納されているため、空間複雑度はO(n)である.
方法3:一次ハッシュテーブル
最初に要素を表に挿入する前に、表に現在の要素に対応するターゲット要素がすでに存在するかどうかを確認し、すでに存在する場合は、対応する解が見つかり、それを返し、存在しない場合は、次の要素を表に挿入して操作を続行します.時間複雑度:n個の要素を含むリストを1回遍歴し,ハッシュテーブルは検索するたびにO(1)の時間を費やすため,時間複雑度はO(n)である.空間複雑度:必要な余分な空間は、ハッシュ・テーブルに格納されている要素の数に依存し、このテーブルは最大n要素を格納する必要があるため、空間複雑度はO(n)である.
入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.
例:
nums = [2, 7, 11, 15], target = 9
nums[0] + nums[1] = 2 + 7 = 9
[0, 1]
方法1:暴力法
各要素xを巡り、target-xに等しい値のターゲット要素が存在するかどうかを検索します.時間複雑度:各要素に対して配列の残りの部分を遍歴して対応するターゲット要素を探そうとすると、O(n)の時間がかかり、n要素なので時間複雑度はO(n 2)である.空間複雑度:O(1).
class Solution {
public:
vector twoSum(vector& nums, int target) {
for(int i=0;i{i,j};
}
}
return vector{};
}
};
方法2:2パスハッシュテーブル
最初の反復:各要素の値とインデックスをテーブルに追加します.2回目の反復:各要素に対応するターゲット要素(target-nums[i])がテーブルに存在するかどうかを確認します.時間複雑度:n個の要素を含むリストを2回遍歴し,ハッシュテーブルの検索時間はO(1)であるため,時間複雑度はO(n)である.空間複雑度:必要な余分な空間は、ハッシュ・テーブルに格納されている要素の数に依存し、このテーブルにはn要素が格納されているため、空間複雑度はO(n)である.
class Solution{
public:
vector twoSum(vector& nums, int target){
map hash;
for(int i=0;i{i,hash.find(t)->second};//first map key,second value
}
return vector();
}
};
方法3:一次ハッシュテーブル
最初に要素を表に挿入する前に、表に現在の要素に対応するターゲット要素がすでに存在するかどうかを確認し、すでに存在する場合は、対応する解が見つかり、それを返し、存在しない場合は、次の要素を表に挿入して操作を続行します.時間複雑度:n個の要素を含むリストを1回遍歴し,ハッシュテーブルは検索するたびにO(1)の時間を費やすため,時間複雑度はO(n)である.空間複雑度:必要な余分な空間は、ハッシュ・テーブルに格納されている要素の数に依存し、このテーブルは最大n要素を格納する必要があるため、空間複雑度はO(n)である.
class Solution{
public:
vector twoSum(vector& nums, int target){
map hash;
for(int i=0;i{hash.find(t)->second,i}; // , ,
hash[nums[i]]=i;
}
return vector {};
}
};