算法口诀
两数之和: 一次遍历,数组存入数据,target相减存在即返回
冒泡算法: 两层遍历,大的往后排
选择排序: 选择最小的值跟头部的交换位置,第二次循环仅选择最小的index,且j=i+1;
插入排序: 从target开始,while 向前遍历j–,找到一个比目标元素小的的元素,插在其后
快速排序: 递归中间值;找到中间节点的值,forEach比该节点值大的放在右边,小的放在左边,进行递归
归并算法: 递归 双指针分而治之。
动态fib: 动态规划解决fib斐波那契数列 dp[i] = dp[i-1] + dp[i-2] (爬楼梯算法)
首字符串下标: map[item] = val ? val+1 : 1
/**
*
- 两数之和
- 给定一个数组 nums 和一个目标值 target,在该数组中找出和为目标值的两个数
- nums: [8, 2, 6, 5, 4, 1, 3] ; target:7
- [2, 5]
- 关键点: 从map中查找是否存在 target-arr[i] 等于key,有则返回;
- /
function twoNumSum(arr, target) {
let map = {}
for(let i = 0; i<arr.length; i++ ) {
if (map[target-arr[i]]) {
return [target-arr[i], arr[i]]
} else {
map[arr[i]] = i
}
}
}
const twoNumSum = (arr, target) => {
let res = []
for(let i=0; i<arr.length; i++) {
if (res.includes(target-arr[i])) {
return [target-arr[i], arr[i]]
} else {
res.push(arr[i])
}
}
}
1 |
|
1 | /*** |
1 | /*** |
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 | // 展开树形结构 |
1 | /*** |