Leetcode配列easy|1.両数の和
3594 ワード
りょうすうの和
整数配列とターゲット値を指定し、配列とターゲット値の2つの数を見つけます.入力ごとに1つの答えしか対応せず、同じ要素が再利用できないと仮定できます.例:
Python版
解法一:二輪遍歴.時間複雑度:O(N^2)空間複雑度:O(1)
解法二:時間複雑度:O(N)空間複雑度:O(N)辞書lookupを確立して最初の数字を格納し、その数字を格納するindex lookup種が存在するか否かを判断する:target-現在の数字、表面現在値とlookup中の値をtargetに加算する. が存在する場合、target-現在の数値のindexと現在の値のindex が返されます.
Enumerate()関数は、リスト、メタグループ、文字列などの遍歴可能なデータオブジェクトをインデックスシーケンスに結合し、forループで一般的に使用されるデータとデータの下付き文字をリストするために使用されます. seasons = ['Spring', 'Summer', 'Fall', 'Winter'] list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
C++版
方案一:時間複雑度:O(NlgN)空間複雑度:O(N)
二指針法を用いて,まず配列を並べ替えて秩序ある区間を形成し,ポインタi,jはそれぞれ頭尾を指す nums 1[i]+nums[j]>tragetの場合、j--、 nums[i]+nums[j] nums[i]+nums[j]==target まで
シナリオ2:時間複雑度:O(N)空間複雑度:O(N)
c++でunordered_を提供mapの容器、unordered_mapの要素は、キー値またはマッピング値の任意の順序でソートされず、それらのハッシュ値に基づいてバケツに組織され、キー値によって単一の要素(定数平均時間複雑度を有する)に迅速にアクセスし、先に現れた要素をunorder_に格納することができる.mapでは、target-nums[i]が存在するかどうかを検索するたびに配列を巡回すればよい.
参考:awesome-algorithm awesome-algorithm
整数配列とターゲット値を指定し、配列とターゲット値の2つの数を見つけます.入力ごとに1つの答えしか対応せず、同じ要素が再利用できないと仮定できます.例:
nums = [2, 7, 11, 15], target = 9
nums[0] + nums[1] = 2 + 7 = 9
[0, 1]
Python版
解法一:二輪遍歴.時間複雑度:O(N^2)空間複雑度:O(1)
class Solution(object):
def twoSum(self, nums, target):
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
解法二:時間複雑度:O(N)空間複雑度:O(N)
class Solution(object):
def twoSum(self, nums, target):
lookup = {}
for i, num in enumerate(nums):
if target - num in lookup:
return [lookup[target-num], i]
else:
lookup[num] = i
Enumerate()関数は、リスト、メタグループ、文字列などの遍歴可能なデータオブジェクトをインデックスシーケンスに結合し、forループで一般的に使用されるデータとデータの下付き文字をリストするために使用されます.
C++版
方案一:時間複雑度:O(NlgN)空間複雑度:O(N)
二指針法を用いて,まず配列を並べ替えて秩序ある区間を形成し,ポインタi,jはそれぞれ頭尾を指す
class Solution
{
public: # public
vector twoSum(vector& nums, int target) # vector vector int
{
vector > nums1; #
for(int i = 0;i < nums.size();++i) # size
nums1.push_back(make_pair(nums[i],i)); #
sort(nums1.begin(),nums1.end()); # sort
int i = 0,j = nums1.size() - 1; # i j
vector ret; #
while(i < j) #
{
if(nums1[i].first + nums1[j].first == target) # nums1
{
ret.push_back(nums1[i].second); # ret
ret.push_back(nums1[j].second);
return ret; #
}
nums1[i].first +nums1[j].first < target ? ++i : --j; # ( 1)?( 2):( 3) 1 2, 3
}
}
};
シナリオ2:時間複雑度:O(N)空間複雑度:O(N)
c++でunordered_を提供mapの容器、unordered_mapの要素は、キー値またはマッピング値の任意の順序でソートされず、それらのハッシュ値に基づいてバケツに組織され、キー値によって単一の要素(定数平均時間複雑度を有する)に迅速にアクセスし、先に現れた要素をunorder_に格納することができる.mapでは、target-nums[i]が存在するかどうかを検索するたびに配列を巡回すればよい.
class Solution
{
public:
vector twoSum(vector& nums, int target)
{
unordered_map m; # m, python
vector res; # res
for (int i = 0; i < nums.size(); ++i) {
m[nums[i]] = i; # nums m, ,
}
for (int i = 0; i < nums.size(); ++i) { #
int t = target - nums[i];
if (m.count(t) && m[t] != i) { # count() m t , 1。 t, t i
res.push_back(i); # res
res.push_back(m[t]); # res
break;
}
}
return res; #
}
};
参考:awesome-algorithm awesome-algorithm