自力で解けるようになるまでLeetCodeの解法勉強3日目:問題1.Two-Sum(簡単/JavaScript)
5340 ワード
はじめに: 私は元会計士からソフトウェア エンジニアに転向し、2022 年 1 月にコーディング ブートキャンプを卒業しました.現在、ほとんどのテック企業にとって、アルゴリズムとデータ構造は面接の避けられない部分です.そして、私の友人の 1 人が、トップ テクノロジー企業に入るためには、60 秒以内にミディアム リートコードの問題を解決する必要があると教えてくれました.
どの問題も (簡単な問題であっても) 解決方法がわからないので、何時間も無駄にして、それを理解することができないと思いました.これが私のアプローチです:
リートコードの問題をランダムに選択するか、対象の企業からオンライン評価を選択します. Youtube または LeetCode のディスカッション セクションから 1 ~ 2 のソリューションを学習します. 1 つのブルート フォース ソリューション、もう 1 つはより最適なソリューションです. 詳細な説明をブログに投稿し、ソリューションをよりよく理解できるように口頭で説明します. ソリューションを見ずに LeetCode でソリューションをコーディングする
忘却曲線と戦う: 次の 3 日間、質問をやり直します.そして、定期的に戻って問題を再検討してください.
整数
各入力には正確に 1 つのソリューションがあり、同じ要素を 2 回使用しないと想定することができます.
任意の順序で回答を返すことができます.
例 1:
例 2:
例 3:
制約:
有効な回答は 1 つだけです.
フォローアップ: O(n2) 時間の複雑さよりも少ないアルゴリズムを考え出すことができますか?
解決策 1 提出の詳細 (2022 年 2 月 11 日現在)
(以下のデータは、毎日新しい提出物があるため、異なる場合があります)
ランタイム: ランタイム: 224 ミリ秒 メモリ使用量: メモリ使用量: 42.5 MB
解決策 2 提出の詳細 (2022 年 2 月 12 日現在)
(以下のデータは、毎日新しい提出物があるため、異なる場合があります)
ランタイム: 88 ミリ秒 メモリ使用量: メモリ使用量: 42.6 MB
**********************************************
参考文献:
LeetCode Problem Link
LeetCode Discussion
Note 1: For...Loop
Note 2: JavaScript Hash Table
Note 3: For...Loop
Blog Cover Image Credit
どの問題も (簡単な問題であっても) 解決方法がわからないので、何時間も無駄にして、それを理解することができないと思いました.これが私のアプローチです:
忘却曲線と戦う: 次の 3 日間、質問をやり直します.そして、定期的に戻って問題を再検討してください.
問題#1。ツーサム
Difficulty: Easy
Language: JavaScript
整数
nums
の配列と整数 target
を指定すると、合計が target
になるような 2 つの数値のインデックスを返します.各入力には正確に 1 つのソリューションがあり、同じ要素を 2 回使用しないと想定することができます.
任意の順序で回答を返すことができます.
例 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
例 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
例 3:
Input: nums = [3,3], target = 6
Output: [0,1]
制約:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
フォローアップ: O(n2) 時間の複雑さよりも少ないアルゴリズムを考え出すことができますか?
解決策 1 (ネストされたループ) と説明:
var twoSum = function(nums, target) {
for (i = 0; i < nums.length; i++) {
/*Loop through nums array (note 1) from position 0*/
for (j = i + 1 ; j < nums.length; j++)
/*Loop through nums array (note 1) from position 1 and add up
every possible pair of numbers until they add up to target number.
*/
if(nums[i] + nums[j] == target)
/*For example, if nums = [2,3,4], the possible pairs would be 2+3,
2+4 (starting from first number 2 add the next numbers). That was
all pairs with the number 2. Then pair 3+4 (starting from second
number 3, add the next numbers).*/
return [i, j]
/*return indices for the pairs found*/
}
};
解決策 1 提出の詳細 (2022 年 2 月 11 日現在)
(以下のデータは、毎日新しい提出物があるため、異なる場合があります)
解決策 2 (オブジェクト) と説明:
var twoSum = function(nums, target) {
let hash = {};
/*create a object (note 2) and utilize object's property value and
property key*/
for(let i = 0; i < nums.length; i++) {
/*Loop through "nums" array and find desired value to store in the
"hash" object */
const n = nums[i];
/*create a variable n to represent each number in the "nums"
array*/
if(hash[target - n] !== undefined) {
/*find the complementary pair for "n" in "hash" object*/
return [hash[target - n], i];
/*if found, return index of both the complementary pair and "n".
We can access object properties using a square bracket
object[property]*/
}
hash[n] = i;
/*If complementary pair for "n" is not found in "hash", store n
and its index in "hash".
Example Input: nums = [2,7,5,11]; target = 9. The first "n" is 2
and since "hash" is initially empty, we won't find the
complementary pair(target - n)= 7 in there. Hence, we store it in
"hash" with the index of the number 2, which is 0. And now our
"hash" is { '7', 0 } (Key is'7' and value is 0 in this object).
Then we exam if complementary pair of the second number 7 can be
found in the "hash". Since we just stored 7 in the previous step,
it will be found in this step. Therefore, we return the value that
has key of '7' in the object: hash[target - n]. And the index of
second number '7':[i]. That is [0,1]. And this is the output of
this example*/
}
}
解決策 2 提出の詳細 (2022 年 2 月 12 日現在)
(以下のデータは、毎日新しい提出物があるため、異なる場合があります)
**********************************************
参考文献:
LeetCode Problem Link
LeetCode Discussion
Note 1: For...Loop
Note 2: JavaScript Hash Table
Note 3: For...Loop
Blog Cover Image Credit
Reference
この問題について(自力で解けるようになるまでLeetCodeの解法勉強3日目:問題1.Two-Sum(簡単/JavaScript)), 我々は、より多くの情報をここで見つけました https://dev.to/killingleetcode/day-3-of-studying-leetcode-solution-until-i-can-solve-one-on-my-own-problem1two-sumeasyjavascript-4o6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol