第一次刷力扣的算法题,开始记录一下;
题目描述
给定一个整数数组 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);
}
}
总结
开始小白算法的第一步,加油!争取每天刷一题。