//循环
function loop(a, b, c) {
// 终止条件
if(a===xxx){
return
}
doSomething(a, b, c);
loop(a+1, b, c);
reverse_state(a, b, c) //还原状态
}
//深度优先搜索
const visited = new Set(); //利用visited记忆化,防止重复计算
function DFS(node, a, b) {
visited.add(node);
doSomething(node, b, c);
for(let i = 0; i<node.children.length; i++) {
if(!visited.has(node.children[i])){
DFS(node.children[i], a, b)
}
}
reverse_state(node, b, c) //还原状态
}
//广度优先搜索
function BFS(root, a, b) {
// 设置缓存队列
const quene = [];
quene.push(root);
while(queue.length>0){
let node = queue.pop();
doSomething(_node, b, c);
for(let i = 0; i<node.children.length; i++) {
quene.push(node.children[i]);
}
}
}
//二分搜索
function binarySearch(array, target) {
let left = 0;
let right = array.length-1;
while(left<=right){
let mid = Math.floor((right + left)/2);
if(array[mid] === target){
//找到了
return xx;
}else if(target<array[mid]){
right = mid-1; //左右边界调整
}else{
left = mid+1;
}
}
return -1;
}
//DP
function DP(a, b, c){
//定义DP[i]的含义,这里有可能是多维数组
let DP = [];
//设置DP[0]的值
DP[0] = xxx;
//这里可能是多重循环
for(let i = 1; i<something; i++) {
DP[i] = doSomething(DP[i-$]) //按照实际情况写出递推公式
}
return DP[i] //结果一般存在最后一个数组或第一个
}