
算法与数据结构
一直以来虽然学了数据结构,也看了书,但是没写笔记,也忘了好多。现在系统学一遍,会之后更新。
努力做一个code杠精
我就是个小垃圾
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
总结(1)蓄水类问题:11. 盛最多水的容器、42. 接雨水、407. 接雨水 II、(补充:优先队列实现存储结构体的大小根堆)
1 用优先级队列实现存储结构体的大小根堆自我认为有这个基本上满足算法问题中关于大小根堆的使用了。在之前我们写过一篇博客实际应用中我们《借助于数组vector来建堆https://blog.youkuaiyun.com/weixin_41747893/article/details/106087209》。但是并没有满足实际应用,经常我们大小根堆里面放的并不是仅仅只有一个数或字符,可能放一个结构体,那么实现如下:(1)建立小根堆struct Node { int row; int col; int val;原创 2020-06-19 14:15:47 · 649 阅读 · 0 评论 -
C++ STL 中大根堆,小根堆的应用。
1》优先队列:在C++中优先队列默认的是大根堆,如果用小根堆则加入greater.priority_queue<int, vector<int>, less<int>>s;//less表示按照递减(从大到小)的顺序插入元素priority_queue<int, vector<int>, greater<int>>s;//greater表示按照递增(从小到大)的顺序插入元素不写第三个参数或者写成less都是大根堆。greater是原创 2020-05-12 23:05:34 · 27630 阅读 · 8 评论 -
【动态规划】03(补充非递归) 给定一个数组,判断数组内是否存在n(n>=0)个数,使其和恰好等于给定整数S。
本篇是对03 给定一个数组,判断数组内是否存在n(n>=0)个数,使其和恰好等于给定整数S也是从这篇开始,我对递归与动态变化开始有了比较清晰的认识,三年以来只知道动态规划与递归,会简单的用递归,然后本身自己的代码参考的别人的动态规划,但是自己还不知道自己写的这个代码是动态规划,真的可笑哈。(自上而下,自底向上)下来我们来看一下对03 补充的这个非递归的代码:代码:bool sub...原创 2020-03-16 00:47:46 · 245 阅读 · 0 评论 -
【动态规划】03 给定一个数组,判断数组内是否存在n(n>=0)个数,使其和恰好等于给定整数S。
看到这个题目,首先要想到动态规划的思想,对于这个题来说,主要是终止条件不好找。请看下图,我们设置函数为Subset()。看上图,假设我们对arr[i]来说,它有两种可能选它或者不选它a.选它,那我们就看对于arr[i-1]之后的数字是否可以组成S-arr[i];b.不选它,那我们就看对于arr[i-1]之后的数字来说是否可以组成S .下来我们来看终止条件:a.若调用某次函数之后,S恰好...原创 2020-03-15 23:19:09 · 736 阅读 · 0 评论 -
【动态规划与递归】02 (0/1背包问题)给定一个非负数组,求不相邻元素的最大和,典型的动态规划问题
文章目录典型例题:思路:递归思路:(自顶向下)非递归思路(自底向上)代码递归:自上而下动态规划 :自底向上典型例题:给定一个非负数组,求不相邻元素的最大和。如下列数组arr[7] = { 1,2,4,1,7,8,3 },最大和是15思路:该题目可以转换成0or1背包问题,递归思路:(自顶向下)对于第七个数字来说:有两种可能,A:选arr[6]是最大和中的一个组成数,然后看arr[4...原创 2020-03-15 22:29:06 · 395 阅读 · 0 评论 -
【二叉树转换】02 二叉搜索树与双向链表,思路比较清晰【剑指Offer】
题目重述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路与剑指Offer上一样:Convert函数返回双向链表的头结点:递归的过程就相当于按照中序遍历,将整个树分解成了无数的小树,然后将他们分别转化成了一小段一小段的双向链表。再利用tempend记录总的链表的末尾,然后将这些小段链表一个接一个地加到末尾。核心思路就是参...原创 2020-03-12 00:11:26 · 136 阅读 · 0 评论 -
【二叉树转换】01 排序数组怎么变二叉搜索树
树与其他数据结构的转换/*这类题目要求将树的结构转化成其他数据结构,例如list,array等,或者反之,从array等结构构成一棵树。前者通常是通过树的遍历,合并局部解来得到全局解,而后者则可以利用D&C的策略,递归将数据结构的两部分分别转换成子树,再合并。*/01排序数组怎么变二叉搜索树TreeNode* helper(vector<int>num, int f...原创 2020-03-11 23:03:51 · 206 阅读 · 0 评论 -
【二叉树】04 给出前序遍历和中序遍历复原二叉树
///给出前序遍历和中序遍历复原二叉树TreeNode* rebuild(int* pdata, int* idata, int n) {//假设给出的前序中序都是数组,pdata 前序;idata中序;n是长度 if (n <= 0) { return NULL; } TreeNode* root = new TreeNode(*pdata); int* iter; f...原创 2020-03-11 23:06:34 · 167 阅读 · 0 评论 -
【二叉树】04 二叉树的路径问题(路径上的值加起来等于某一特定值的所有路径的集合)
树的路径问题/*找出一条满足特定条件的路径。对于这类问题,通常都是传入一个vector记录当前走过的路径(为尽可能模板化,统一记为path),还需要传入另一个vector 引用记录所有符合条件的path(为尽可能模板化,统一记为result)。注意,result可以用引用或指针行驶,相当于一个全局变量,或者就开辟一个独立于函数的成员变量。由于path通常是vector,那么result就...原创 2020-03-10 23:51:09 · 265 阅读 · 0 评论 -
【二叉树】03 判断是否是平衡二叉树+求树的深度
判断是否是平衡二叉树判断是否是平衡二叉树,就是判断二叉树左右子树深度之差不大于1.int level(TreeNode* root) { if (root == NULL) return 0; return max(level(root->left), level(root->right)) + 1;}bool isBalanced(TreeNode* root) {...原创 2020-03-10 23:47:45 · 138 阅读 · 0 评论 -
【二叉树】02 树的各种遍历(递归与非递归的先中后序遍历,层次遍历)
二叉树的前中后遍历,递归与非递归struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode (int x):val(x),left(NULL),right(NULL){}};递归先序遍历:void PreOrderTraversal(TreeNode* root) { if (!root) {...原创 2020-03-10 23:44:49 · 220 阅读 · 0 评论 -
【动态规划与递归】01 动态规划与递归
文章目录动态规划与递归01 递归和动态规划不同:02 动态规划的四要素:人话分析01 什么是递归02 使用递归地注意事项( 动态规划是开发高效的递归算法实现的基本技术)03 举例 Fiboncci Number(斐波那契数)001 重述一下题目:002 递归自顶向下003 动态规划 自底向上 用数组来存储O(n)03 总结动态规划与递归(先来一点看的迷迷糊糊的理论)01 递归和动态规划不同...原创 2020-03-15 21:10:56 · 588 阅读 · 0 评论