[LeetCode01.两数之和算法] 刷题打卡

126 阅读1分钟

第一次刷力扣的算法题,开始记录一下;

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

你可以按任意顺序返回答案。

方法一

解题思路

第一次做算法题,复杂的我也想不出来。通过循环,将数组中的每个元素i与其他元素相加,和要是等于目标数值就输出。又因为题目中同一个元素不能使用两遍,所以内层循环j从i之后的元素开始。

AC代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    var len = nums.length;
    for(var i=0;i<len;i++){
        for(var j=i+1;j<len;j++){
            var sum = nums[i]+nums[j];
            if(sum===target){
                return [i,j];
            }
        }
    }
};

方法二

解题思路

Hash解法,通过Map将不满足条件的插入map对象中,返回满足条件的数据元素下标组合

AC代码

twoSum = function (nums, target) {
    let len = nums.length;
    let map = new Map();
    map.set(nums[0], 0);

    for (let i = 1; i < len; i++) {
      let other = target - nums[i];
      if (map.get(other) !== undefined) return [map.get(other), i];
      map.set(nums[i], i);
   }
}

总结

开始小白算法的第一步,加油!争取每天刷一题。

链接:leetcode-cn.com/problems/tw…