ghy

ghy

aha~

刷算法题-卷起来

RT。

大环境不景气,为了生活,必须好好学习了 📚📖

一天一道算法题#

1.【链表中倒数第 k 个节点】两个指针,a=0, b=k,一起向前移动,当 k 取值 = null 时,a=n-k。

  • 【 二叉搜索树中第 K 小的元素】中序遍历,k--
  • 【数组中的第 K 个最大元素】快速排序,不需要排序,只需要比较。

2.【全排列】递归 (DFS), 依次取数组元素,除去当前元素再分别递归取数组元素 (两 for 循环 + 递归)

3.【反转链表】一次循环 {prev=null,cur=0, next=temp}, 当 next = null 时,结束 while 循环

4.【二叉树的层序遍历】广度优先 BFS:while 同级遍历 (队列 shift) & 收集下一层节点 (push)

5.【螺旋矩阵】巧技:削苹果。削掉最外面一层 (shift 数组及其余数组 pop),翻转整个数组 180 度 ([].reverse),再削。

6.【复原 IP 地址】分割字符串,递归 (dfs), 检查每一段是否合法 0~255

7.【岛屿数量】每遇到陆地格子 = 1, 则 DFS 搜索,标记已搜索过的格子 (标记为 2)。

8.【N 叉树的层序遍历】BFS 广度优先遍历 root-->nextRoot []-->nextRoot []

9.【翻转二叉树】前、后序 DFS 深度遍历 or BFS 广度优先遍历,不能用中序 (会翻转两次)

10.【最长回文子串】https://writings.sh/post/algorithm-longest-palindromic-substring

11.【最长不含重复字符的子字符串】动态规划 + hashMap

12.【二叉树的最近公共祖先】思路 1(二叉遍历) 算出路径,然后对比两个路径的分叉点;

  • 思路 2: 两个值都在左边,则最近 root 在左边;一左一右,则当前 root 就是最近公共祖先。

13.【旋转图像】两个 for,置换 matrix [j][n - 1- i] = matrix [i][j]

14.【无重复字符的最长子串】滑块 ->map 标识字符位置,max 标识当前最大位置

15.【合并两个有序数组】双指针,依次比较放入到一个新数组

16.【求根到叶子节点数字之和】dfs 算法,标记已访问过的子节点 (左 or 右)

17.【路径总和】dfs 算法,标记已访问过的子节点 (左 or 右)

18.【最大子序和】 单循环下,curSum <0 则舍弃 & 重新累加,curSum>maxSum && maxSum = curSum

19.【两数之和】建一个 map,放入 index 和 value,顺便比对下已放入的是否可以配对

  • 【三数之和】2. 双指针法:排序数组 & 选定 [a,b,c] = [i,i+1,len-1],target=-num [i]

20.【数组中的第 K 个最大元素】快排法 (选择一个基准 p,小于 p 移到左边,大于 p 移到右边),从 i=0 指针移动,如果当前指针 i=k,则 return

21.【长度最小的子数组】 滑块 ->map 标识字符位置

22.【字符串相加】转数组 & 反序 reverse,满 10 进 1

23.【二叉树的最大深度】前序遍历
24.【LRU 算法】new Map (),map 是一个散列队列,set 总是到队列最后一个


一些资料#

  • 字节算法面试题:github.com/afatcoder/LeetcodeTop/blob/master/bytedance/frontend.md
  • leetcode Top: github.com/afatcoder/LeetcodeTop
  • 看完这篇,你会理解图和树的遍历: https://zhuanlan.zhihu.com/p/98406357
  • 二叉树遍历: github.com/liusaint/ls-blog/issues/25

待续

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。