引言:用Js攻略leetcode中的算法,將會介紹自己的思路和注意點,一邊學(xué)習(xí)一邊愉快刷題呀。
問題:
給定一個整數(shù)數(shù)組和一個目標(biāo)值,找出數(shù)組中和為目標(biāo)值的兩個數(shù)。你可以假設(shè)每個輸入只對應(yīng)一種答案,且同樣的元素不能被重復(fù)利用。
實例:
給定 nums = [2, 7, 11, 15], target = 9因為 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]
思考:
- 為了提高算法效率,先開始想數(shù)組進(jìn)行排序后,找到小于target的最大值再進(jìn)行查找第二個值。后來發(fā)現(xiàn):不對呀!我們要返回的是在原數(shù)組的順序,假設(shè)nums = [3,6,3], target = 6, 排序后位置信息就丟失啦。
-
然后就想用es6新增的Map數(shù)據(jù)結(jié)構(gòu),結(jié)果發(fā)現(xiàn)map鍵值是覆蓋的,如下圖:
image.png - 所以,最后我還是采用了暴力法:遍歷每個元素 x,并查找是否存在一個值與 target - x相等的目標(biāo)元素。
- 相關(guān)問題:數(shù)組進(jìn)行排序,想用sort()語法,結(jié)果發(fā)現(xiàn)兩點需要注意:一是數(shù)組sort改變了原數(shù)組,解決方法用slice復(fù)制一個新array:
numSort = num.slice(0).sort();
二是排序是按照字符串一位一位進(jìn)行比較的,解決方法sort中定義排序函數(shù):
num.slice(0).sort((a,b)=>a-b)

image.png
代碼:
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;
}
}
}
};
