引言:用Js攻略leetcode中的算法,将会介绍自己的思路和注意点,一边学习一边愉快刷题呀。
问题:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
实例:
给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]
思考:
- 为了提高算法效率,先开始想数组进行排序后,找到小于target的最大值再进行查找第二个值。后来发现:不对呀!我们要返回的是在原数组的顺序,假设nums = [3,6,3], target = 6, 排序后位置信息就丢失啦。
-
然后就想用es6新增的Map数据结构,结果发现map键值是覆盖的,如下图:
image.png - 所以,最后我还是采用了暴力法:遍历每个元素 x,并查找是否存在一个值与 target - x相等的目标元素。
- 相关问题:数组进行排序,想用sort()语法,结果发现两点需要注意:一是数组sort改变了原数组,解决方法用slice复制一个新array:
numSort = num.slice(0).sort();
二是排序是按照字符串一位一位进行比较的,解决方法sort中定义排序函数:
image.pngnum.slice(0).sort((a,b)=>a-b)
代码:
var twoSum = function(nums, target) {
var index=[];
for(var i = nums.length-1; i > 0; i--) {
for(var j = i - 1; j >= 0; j--) {
if(nums[j] + nums[i] == target) {
index.push(j);
index.push(i);
return index;
}
}
}
};
网友评论