把寻常的人生过好
才是最不寻常的事
前言
一个胆小紧张的证人正在接受律师的询问。
律师厉声问道:"你是否结过婚?”
“是的,我结过一次。”
证人声音很小,还有些颤抖。
“那么你和谁结婚了?”
“一个女人。”
律师有些发怒
“废话,你当然是和一个女人结婚了。你听说过有谁会和一个男人结婚吗?”
证人颤抖着说:“听说过,我姐姐就和一个男人结婚了。”
一个人是不完整的,两个人才没有缺憾
凭什么!你都是一个人来的,怎么就不可以一个人走呢
一个人看得的寂寞,两个人看得是烟火
我才懒得管你们,反正最后不管是一个人还是两个人,你们都会后悔的 ╥﹏╥\
1 思路分析
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
1.1 基本步骤
- 遍历数组nums,得到 num和i
- 寻找 9-num 的位置j
- 返回 [j, i]
1.2 重点步骤
寻找 9-num 的位置j
2.1. 建立哈希映射,key为num, value为i
2.2. 查找哈希表,获取value
2 代码片段
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
// 使用map数据结构
// 可直接使用has,get,set
const m = new Map()
// 1.遍历nums
for (let i = 0; i < nums.length; i++) {
const num = nums[i]
// 2.寻找target - num的位置
if (m.has(target - num)) {
const j = m.get(target - num)
// 3.返回
return [j, i]
} else {
// 2.1建立哈希映射
// 同时避免同一元素相加 [3, 2, 4] 6
m.set(num, i)
}
}
}
复制代码
3 技巧总结
1.Map
// o = {}
m = new Map()
// o.a = b
m.set('a', b)
// o.a
m.get('a')
// a in o
m.has('a')
// delete o.a
m.delete('a')
// Object.keys(o).length
m.size
复制代码
2.双层for循环解构
// for * for
for (let i=0; i<nums.length; i++) {
for (let j=0; j<nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j]
}
}
}
// for + for
// 哈希映射
for (let j=0; j<nums.length; j++) {
m.set(nums[j], j)
}
// 循环
for (let i=0; i<nums.length; i++) {
if (m.has(target - nums[i])) {
return [i, m.get(target - nums[i])]
}
}
// for
for (let i=0; i<nums.length; i++) {
// 一边循环
if (m.has(target - nums[i])) {
return [m.get(target - nums[i]), i]
} else {
// 一边建立哈希映射,同时去重
m.set(nums[i], i)
}
}
复制代码
谁会和一个男人结婚
自然不是男人咯 o(╯□╰)o
参考链接
往期回顾
- 期待下期 (*❦ω❦)