当前位置:   article > 正文

算法~本质

算法~本质

仅做一些笔记

数据结构分为数组和链表,数据结构的目的是提升增删改查的效率。算法的本质是基于这两种数据结构进行高效穷举。(1.如何穷举?--递归/dp。2.如何聪明地穷举?--并查集/贪心/KMP)

单链表--双指针

数组--二分搜索/双指针/滑动窗口/前缀+差分

二叉树系列(回溯算法+动态规划)

eg.求二叉树最大深度

1.回溯算法:

  1. class Solution {
  2. public:
  3. // 记录最大深度
  4. int res = 0;
  5. int depth = 0;
  6. // 主函数
  7. int maxDepth(TreeNode* root) {
  8. traverse(root);
  9. return res;
  10. }
  11. // 二叉树遍历框架
  12. void traverse(TreeNode* root) {
  13. if (root == NULL) {
  14. // 到达叶子节点
  15. res = max(res, depth);
  16. return;
  17. }
  18. // 前序遍历位置
  19. depth++;
  20. traverse(root->left);
  21. traverse(root->right);
  22. // 后序遍历位置
  23. depth--;
  24. }
  25. };

2.分解问题计算答案

  1. // 定义:输入根节点,返回这棵二叉树的最大深度
  2. int maxDepth(TreeNode* root) {
  3. if (root == nullptr) {
  4. return 0;
  5. }
  6. // 递归计算左右子树的最大深度
  7. int leftMax = maxDepth(root->left);
  8. int rightMax = maxDepth(root->right);
  9. // 整棵树的最大深度
  10. int res = max(leftMax, rightMax) + 1;
  11. return res;
  12. }

eg.二叉树前缀遍历

1.回溯算法:

  1. vector<int> res;
  2. // 返回前序遍历结果
  3. vector<int> preorder(TreeNode* root) {
  4. traverse(root);
  5. return res;
  6. }
  7. // 二叉树遍历函数
  8. void traverse(TreeNode* root) {
  9. if (root == nullptr) {
  10. return;
  11. }
  12. // 前序遍历位置
  13. res.push_back(root->val);
  14. traverse(root->left);
  15. traverse(root->right);
  16. }

2. 分解问题计算答案

  1. // 定义:输入一棵二叉树的根节点,返回这棵树的前序遍历结果
  2. vector<int> preorder(TreeNode* root) {
  3. vector<int> res;
  4. if (root == NULL) {
  5. return res;
  6. }
  7. // 前序遍历的结果,root->val 在第一个
  8. res.push_back(root->val);
  9. // 后面接着左子树的前序遍历结果
  10. vector<int> left = preorder(root->left);
  11. // 最后接着右子树的前序遍历结果
  12. vector<int> right = preorder(root->right);
  13. res.insert(res.end(), left.begin(), left.end());
  14. res.insert(res.end(), right.begin(), right.end());
  15. return res;
  16. }

引用:我的刷题心得:算法的本质 | labuladong 的算法笔记

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/518324
推荐阅读
相关标签
  

闽ICP备14008679号