1、做算法题前,一定要先弄清楚 时间复杂度;这样在解答时心里能明白 此方案 的时间复杂度是多少。
2、前端最重要的数据结构是“树”,所以 树的算法题 要多做,多理解
数据结构
1、链表
//常用遍历
while(head){
head = head.next
}
return head
//常加哨兵
let dummny ={
next: head
}
return dummny.next
2、数组
for(let i=;i<arr.length;i++){
arr[i]
}
3、树
前端最需要刷的数据结构!!!
如:(二叉树)
functon walk(treeNode){
//终止条件
if(treeNode==null){
return
}
处理treeNode //进入节点
walk(treeNode.left)
walk(treeNode.right)
walk(treeNode.left)
处理treeNode
walk(treeNode.right)
walk(treeNode.left)
walk(treeNode.right)
处理treeNode //离开节点
}
算法思想
1、双指针(快慢指针,头尾指针)
- 链表,数组
let fast = head,slow = head
while(fast && fast.next){
...
}
1et i=0
let j=0
2、递归和回溯
function backtrack(数据,路径缓存){
循环:(每次取下一个值)
标记
backtrack(数据,路径缓存)
取消标记
}
3、动态规划 【重点】
- 暴力解(画图)
- 研究优化,加备忘录
- 递推
4、贪心
贪心算法没有公式
网友评论