数据结构和算法
打基础篇
松花煮酒
这个作者很懒,什么都没留下…
展开
-
力扣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 · 193 阅读 · 0 评论 -
快排算法
快速排序的复杂度为O(nlog2n)原创 2020-05-09 20:42:28 · 152 阅读 · 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 · 1679 阅读 · 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 · 191 阅读 · 0 评论 -
分治策略之棋盘覆盖问题
引出主角登场解法代码总结1:引出首先用合并排序来引出我们今天的主角,合并排序即使用了分治的策略,它将所要排序的区间划分为2个子区间,将这两个子区间分别进行递归排好顺序,然后合并这两个子区间(合并过程运用了简单的双指针算法)即获得原问题的解。其实棋盘覆盖问题也是这样的。2:主角登场问题:在一个2k*2k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格。在棋盘覆盖问...原创 2020-04-27 22:49:17 · 509 阅读 · 0 评论 -
使用prim算法构造最小生成树
对于一个无向连通图,若是稠密图的话:存储:邻接矩阵g[N][N]来存储图,(N为图最大的点的数量)dist[N]存储集合外的点到集合的最短距离,s[N],即集合s,存储集合的点,若s[i] == true,则该点在集合,否则不在。算法:设一个s集合(图的点的集合),初始时集合没有点步骤:1:从所有点中找距离s集合最近的点:t2:将t加入这个集合3:更新:集合外的点到集合的距离结束标...原创 2020-03-26 22:40:38 · 1519 阅读 · 0 评论