https://leetcode-cn.com/problems/two-sum/
for loop常用解法
从第一个开始与后面相加, 直到等于target
var twoSum = function(nums, target) {
//map, for, forEach, for in, sor
var re = [];
for(var i in nums.length) {
nums[i] < target ? re += nums[i] : index++
for(var j =1; j< nums.length; j++)
console.log(i)
if((nums[j] + nums[i]) == target)
return [i, j]
else
return
}
// return re
};
//牛逼的 j = i+1
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) { return [i, j] } } }
arr.indexOf(searchElement[, fromIndex = 0])
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
//for需要{}, if不可以不用
//for不用{}会出现意向不到的情况
for(let i in nums){
let j=nums.indexOf(target-nums[i],i+1) //i = 0, 是否有9 - nums【0】, 从第0后面开始
if(j>i)
console.log(i, j)
return [i,j]
}
}
哈希表
jsmap的使用
var twoSum = function(nums, target) {
const map = new Map()
for (let i = 0; i < nums.length; i ++) {
//get将值放入otherIndex, 创建一个map, i递增,
const otherIndex = map.get(target - nums[i])
//undefined也要注意
if (otherIndex !== undefined) return [otherIndex, i]
//值在前面 下标在后面
map.set(nums[i], i)
}
};
var twoSum = function(nums, target) {
let map = {};
for(let i = 0,len = nums.length;i<len;i++){
if(map.hasOwnProperty(target - nums[i])){
return [map[target - nums[i]],i];
}
map[nums[i]] = i;
}
};
牛逼的indexOf
var twoSum = function(nums, target) {
for(let i = 0,len = nums.length;i<len;i++){
let index = nums.indexOf(target - nums[i]); //index = x
if(i!=index&&index != -1){ //index没有返回-1,只要存在就可以返回了
return [i ,index];
}
}
};
总结
leetcode的题目很明显都是套路,几乎都是差不多的解法
从暴力解法,到比较巧的使用indexOf, 哈希表等算法之上的东西,
思路可以围绕着这些暴力解法,和方法直接展开,不过要考虑好边界条件
。
边界条件非常模糊在脑子里,例如indexOf返回的下表怎么处理?
有下表怎么确立返回条件,需要逻辑十分清晰,
i++, j = target - nums[i]的下标
只要j不等i 就可以返回[i, j]
网友评论