算法~本质

仅做一些笔记

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

单链表--双指针

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

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

eg.求二叉树最大深度

1.回溯算法:

cpp 复制代码
class Solution {
public:

    // 记录最大深度
    int res = 0;
    int depth = 0;

    // 主函数
    int maxDepth(TreeNode* root) {
        traverse(root);
        return res;
    }

    // 二叉树遍历框架
    void traverse(TreeNode* root) {
        if (root == NULL) {
            // 到达叶子节点
            res = max(res, depth);
            return;
        }
        // 前序遍历位置
        depth++;
        traverse(root->left);
        traverse(root->right);
        // 后序遍历位置
        depth--;
    }
};

2.分解问题计算答案

cpp 复制代码
// 定义:输入根节点,返回这棵二叉树的最大深度
int maxDepth(TreeNode* root) {
    if (root == nullptr) {
        return 0;
    }
    // 递归计算左右子树的最大深度
    int leftMax = maxDepth(root->left);
    int rightMax = maxDepth(root->right);
    // 整棵树的最大深度
    int res = max(leftMax, rightMax) + 1;

    return res;
}

eg.二叉树前缀遍历

1.回溯算法:

cpp 复制代码
vector<int> res;

// 返回前序遍历结果
vector<int> preorder(TreeNode* root) {
    traverse(root);
    return res;
}

// 二叉树遍历函数
void traverse(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    // 前序遍历位置
    res.push_back(root->val);
    traverse(root->left);
    traverse(root->right);
}
  1. 分解问题计算答案
cpp 复制代码
// 定义:输入一棵二叉树的根节点,返回这棵树的前序遍历结果
vector<int> preorder(TreeNode* root) {
    vector<int> res;
    if (root == NULL) {
        return res;
    }
    // 前序遍历的结果,root->val 在第一个
    res.push_back(root->val);
    // 后面接着左子树的前序遍历结果
    vector<int> left = preorder(root->left);
    // 最后接着右子树的前序遍历结果
    vector<int> right = preorder(root->right);
    res.insert(res.end(), left.begin(), left.end());
    res.insert(res.end(), right.begin(), right.end());
    return res;
}

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

相关推荐
AI进化营-智能译站2 分钟前
ROS2 C++开发系列11-VS Code一键生成Doxygen注释|让ROS2节点文档自动跟上代码迭代
java·数据库·c++·ai
qyzm7 分钟前
Codeforces Round 1073 (Div. 2)
数据结构·python·算法
zhouwy1131 小时前
Linux文件系统与IO编程
linux·c++
深邃-2 小时前
【数据结构与算法】-二叉树(2):实现顺序结构二叉树(堆的实现),向上调整算法,向下调整算法,堆排序,TOP-K问题
数据结构·算法·二叉树·排序算法·堆排序··top-k
We་ct5 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
王老师青少年编程9 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮10 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说10 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove11 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung11 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展