经典的第一题,直接上代码。
暴力 O(n^2) 撸法
直接循环两次暴力解题。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
if(nums&&nums.length<2) return []
var index = 0
while(index<nums.length){
var firstNum = nums[index]
for(let i = index+1;i< nums.length;i++){
var secondNum = nums[i]
if(firstNum+secondNum == target ) return [index,i]
}
index++
}
return []
};
复制代码
优雅的 O(n) 解法
重点在于我们使用 Object 缓存了计算结果:
key:目标值与当前值的 差值
value:当前值的 index
得到结果的条件:找到了缓存中需要的差值
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
// key calue cache
var cache = {}
for(let i = 0;i< nums.length;i++){
if(typeof cache[nums[i]] !== 'undefined'){
//bingo: return resualt
return [ cache[nums[i]],i ]
}else{
// miss: cache diff and index
cache[target - nums[i]] = i
}
}
return []
};
复制代码
贴个优化结果吧: