目录
2. 以nums = 【3,2,4】,value = 6为例子;
1,题目-- 两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
2,代码
2.1 暴力求解
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
// 暴力求解
for(let i =0;i<nums.length-1;i++){
for(let j=i+1;j<nums.length;j++){
if(nums[i]+nums[j] === target){
return [i,j];
}
}
}
};
2.2暴力求解2
提前运算出目标res的值 后续只需比较,无需再计算
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
// 暴力求解
for(let i =0;i<nums.length-1;i++){
res = target - nums[i];//提前运算
for(let j=i+1;j<nums.length;j++){
if(nums[j] === res){
return [i,j];
}
}
}
};
2.3 哈希算法
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
// 哈希算法
const hashtable = new Map();
for(let i=0;i<nums.length;i++){
if(hashtable.has(target-nums[i])){
return [hashtable.get(target - nums[i]),i];
}
hashtable.set(nums[i],i);
}
return [];
};
使用哈希表,可以将寻找
target - x
的时间复杂度降低到从O(N) 降低到O(1)。
3,学习与总结
3.1 思路回顾
1. 关键在于将选择target-x的时间成本降低
步骤一:判断 hashtable中是否含义target - nums[i];
- 题目给定的背景是有且仅有一对答案,那么当第一个元素出现时,会被set(key,value)到hashtable中,而第二个元素值出现时,就能找到,即target - nums[i] 的值,此时就可以利用get(key)获取其value;
- 本题hashtable的设置也值得我学习,set(nums[i],i)将value设为i(下标值),从而get(nums[i])就可以获取到对应的下标;
2. 以nums = 【3,2,4】,value = 6为例子;
每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
2 4互相的关系 2 对应4 4对应2;
当i = 2,hashtable.has( 6 - nums[2]) 就能够找到 i=1的nums[1]
勉励自己:贵在坚持!