💻

【LeetCode-Easy】1. Two Sum

2024/02/11に公開

*これはLeetCodeの問題「1. Two Sum」の回答をメモした備忘録です。

問題

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
整数numsの配列と整数targetが与えられる。2つの数字の合計がtargetになる、numsの中の2つの数値のインデックスを返す。
組み合わせは1つしか存在せず、同じ数字は1度しか使ってはいけない。
返す数字の順番は自由でよい。

Input: nums = [2,7,11,15], target = 9
Output: [0,1]

回答

Solutionsでvest votedだった回答

function twoSum(nums: number[], target: number): number[] {
    for(let i = 0; i < nums.length; i++){
        for(let j = i + 1; j < nums.length; j++){
            if(nums[i] + nums[j] == target){
                let result : number[] = [i, j];
                return result;
            }
        }
    }
};

回答(解説メモあり)

function twoSum(nums: number[], target: number): number[] {
    for(let i = 0; i < nums.length; i++){
    //iは0からスタートして、forの中の処理が終わる度に1つず増やす。numsの配列の数分だけループする。
        for(let j = i + 1; j < nums.length; j++){
        //jはnumsの配列のi番目+1からスタートして、forの中の処理が終わる度に1つず増やす。numsの配列の数分だけループする。
            if(nums[i] + nums[j] == target){
            //[i]と[j]を合計して、targetと同じ数になったら
                let result : number[] = [i, j];
                //resultにnumber[i,j]を入れる
                return result;
                //resultを返す
            }
        }
    }
};

メモ

nums[6,4,2,7] target=6

  1. i=0からスタート → 6
  2. j=i+1からスタート → 4
  3. 6+4=10 targetではないので2に戻る
  4. j=i+2 → 6+2=8 targetではないので2に戻る ....
  5. i=1 → 4
  6. J=i+1 → 2
  7. 4+2=6 targetではないので6に戻る ...

課題

処理が重たくなるので、for文を使わない方法を学ぶ必要がある。

Discussion