数据结构和算法
打基础篇
松花煮酒
这个作者很懒,什么都没留下…
展开
-
力扣155之最小栈
题目链接: link. 辅助栈法 用一个辅助栈来存储当前栈所有元素的最小值,主栈每压栈一次,辅助栈都要存一次当前所有元素的最小值。 代码: class MinStack { public: /** initialize your data structure here. */ stack<int>sk1; stack<int>sk2; MinStack() { } void push(int x) {原创 2020-05-12 22:22:01 · 168 阅读 · 0 评论 -
快排算法
快速排序的复杂度为O(nlog2n)原创 2020-05-09 20:42:28 · 144 阅读 · 0 评论 -
双指针算法详解
首先有两种双指针算法的形式: 1:对于一个序列,两个指针维护着一段区间。比如快排算法。 2:对于两个序列,维护某种次序。如归并排序中合并两个有序序列的操作。 对双指针算法的理解: 对于需要n^2次暴力搜索算法的优化,使其只需 kn 的复杂度。 for( int i = 0; i < n; i ++) { for( int j = 0; j < n; j ++) { ... }...原创 2020-05-09 20:37:32 · 1603 阅读 · 0 评论 -
力扣之98题验证二叉搜索树
题目 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 输入: 2 / \ 1 3 输出: true 输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根...原创 2020-05-05 18:11:56 · 171 阅读 · 0 评论 -
分治策略之棋盘覆盖问题
引出 主角登场 解法 代码 总结 1:引出 首先用合并排序来引出我们今天的主角,合并排序即使用了分治的策略,它将所要排序的区间划分为2个子区间,将这两个子区间分别进行递归排好顺序,然后合并这两个子区间(合并过程运用了简单的双指针算法)即获得原问题的解。其实棋盘覆盖问题也是这样的。 2:主角登场 问题:在一个2k*2k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格。在棋盘覆盖问...原创 2020-04-27 22:49:17 · 469 阅读 · 0 评论 -
使用prim算法构造最小生成树
对于一个无向连通图,若是稠密图的话: 存储:邻接矩阵g[N][N]来存储图,(N为图最大的点的数量) dist[N]存储集合外的点到集合的最短距离, s[N],即集合s,存储集合的点,若s[i] == true,则该点在集合,否则不在。 算法:设一个s集合(图的点的集合),初始时集合没有点 步骤:1:从所有点中找距离s集合最近的点:t 2:将t加入这个集合 3:更新:集合外的点到集合的距离 结束标...原创 2020-03-26 22:40:38 · 1437 阅读 · 0 评论