【Leetcode】【簡単】【1.両方の和】【JavaScript】

2811 ワード

テーマの説明
1.二つの数の和
与えられた整数配列nums 目標値targetと同じ配列の中から目標値を見つけてください. 二つ 整数を返します.
各入力は一つの答えにしか対応しないと仮定してもいいです.しかし、この配列の同じ要素を繰り返し利用することはできません.
例:
nums=[2,7,11,15]を与えられ、target=9
nums[0]+nums[1]=2+7=9なので[0,1]に戻ります.
ソース:スナップリンク:https://leetcode-cn.com/problems/two-sum著作権はネットの所有権を受領する.商業転載は公式の授権に連絡してください.商業転載ではないので、出典を明記してください.
 
答え:
解答1:
個人の考え方:
二つのポインタを定義します.一つは上の方を指します.一つは尾を指します.尾は頭に向かって進みます.ポインタが重なる時、頭のポインタは1を加えます.
2つの要素を合わせたら、タージに等しいまで.
216 ms
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let start = 0;
    let end = nums.length-1
    while(start <= end){
        if(start === nums.length-1){
            break
        }
        if(start === end){
           start++
            end = nums.length-1
           }
        if(nums[start]+nums[end] === target){
           return[start,end]
        }
        end--
    }
};
 
 
解答2:
既存の一番早い答え:
それともhash表の動作が速くて、空のオブジェクトを定義して、配列を巡回します.もしtargetから現在の要素から得られた値を引いたら、対象のkeyになります.
得られた値が対象のkeyでない場合は、この要素を対象としたkey、要素索引を対応するvalueとする.
44 ms
var twoSum = function (nums, target) {
  let obj = {};
  for (var i = 0; i < nums.length; i++) {
    if (obj[target - nums[i]] !== undefined) {
      return [obj[target - nums[i]], i];
    }
    obj[nums[i]] = i;
  }
};