![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
skymeteorite
这个作者很懒,什么都没留下…
展开
-
leetcode 20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true 方法一:经典的用原创 2020-07-30 10:34:53 · 144 阅读 · 0 评论 -
leetcode 394. 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 示例 1: 输入:s = "3[a]2[bc]" 输出:"aaabcbc" 示例 2:原创 2020-07-30 10:21:31 · 109 阅读 · 0 评论 -
leetcode 735. 行星碰撞
给定一个整数数组 asteroids,表示在同一行的行星。 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。 每一颗行星以相同的速度移动。 找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。 如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。 示例 1: 输入: asteroids = [5, 10, -5] 输出: [5, 10] 解释: 10 和 -5 碰撞后只剩下 10。 5原创 2020-07-29 14:11:26 · 270 阅读 · 0 评论 -
leetcode 456. 132模式
给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为: 当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时, 验证这个序列中是否含有132模式的子序列。 注意:n 的值小于15000。 示例1: 输入: [1, 2, 3, 4] 输出: False 解释: 序列中不存在132模式的子序列。 示例 2: 输入: [3, 1, 4, 2] 输出: True 解释: 序列中有原创 2020-07-28 21:57:50 · 89 阅读 · 0 评论 -
leetcode 106. 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 方法:需要先遍历右子树再遍历左子树 /** * Definition f...原创 2019-11-20 22:37:37 · 64 阅读 · 0 评论 -
leetcode 105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 方法: /** * Definition for a binary tre...原创 2019-11-20 22:09:50 · 56 阅读 · 0 评论 -
树状数组总结
这几天又把树状数组复习一下,感觉又学到了写新东西,把模板写下来,还有自己的一些想法。 首先lowbit函数 int lowbit(int x) { reutrn x&(-x); } 首先,定位lowbit(natural)为自然数(即1,2,3…n)的二进制形式中最右边出现1的值。 比如:4 = 100,lowbit(4) = 4;36 = 100100,lowbit(...原创 2016-05-17 18:17:10 · 279 阅读 · 0 评论 -
Pair: normal and paranormal 栈的应用
http://acm.hust.edu.cn/vjudge/contest/128024#problem/H 一个字符串有大小写对应,每次删掉相邻的大小写字母并记录相应位置,看最后能否删完。#include <iostream> #include <stack> #include <cstdio> using namespace std;const int maxn=5050;struct nod原创 2016-08-13 20:26:32 · 390 阅读 · 0 评论 -
hdu5818栈的操作
比较简单巧妙的一个做法是引入一个新的栈C,每次合并的时候就把A和B合并到C上,然后把A和B都清空. push还是按正常做,pop注意当遇到要pop的栈为空时,因为题目保证不会对空栈进行pop操作,所以这时应直接改为对C栈进行pop操作. 这样做因为保证每个元素最多只在一次合并中被处理到,pop和push操作当然也是每个元素只做一次,所以总复杂度是O(N)的. 另一种做法是用链表来直接模拟,复杂度也是原创 2016-08-09 21:09:37 · 1050 阅读 · 0 评论 -
Entertain Box multiset的应用
先插入k条空线段,每次比较左端点,修改右端点#include <iostream> #include <set> #include <cstdio> #include <algorithm> using namespace std;typedef long long ll;const int maxn=100005;struct node { ll x,y; }data[maxn]; ll原创 2016-09-09 17:59:51 · 207 阅读 · 0 评论 -
hdu1022栈的应用
http://acm.hdu.edu.cn/showproblem.php?pid=1022 火车进站问题,按序列1的顺序进站,能否按照序列2出站,当然可以随时进站出站。#include <iostream> #include <stack> using namespace std;int main() { stack<char>s; int i,j,k,result[100],n原创 2016-06-14 11:08:41 · 219 阅读 · 0 评论 -
codeforces389 a
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=117457#problem/A#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<ctype.h> #include<vector> #include<map> using nam原创 2016-05-23 11:15:18 · 217 阅读 · 0 评论 -
manacher算法总结
原文http://blog.csdn.net/dyx404514/article/details/42061017Manacher算法 算法总结第三弹 manacher算法,前面讲了两个字符串相算法——kmp和拓展kmp,这次来还是来总结一个字符串算法,manacher算法,我习惯叫他 “马拉车”算法。 相对于前面介绍的两个算法,Manacher算法的应用范围要狭窄得多,但是它的思想和拓展kmp转载 2016-04-13 20:31:41 · 255 阅读 · 0 评论 -
hdu4585splay
http://acm.hdu.edu.cn/showproblem.php?pid=4585题意 开始有一个大和尚编号为1 攻击力1000 000 000 后来不断加入和尚 给出编号和攻击力 每加入一个和与他攻击力最接近的和尚比武,如果有两个差值一样 一大一小 就和小的比武 分别输出编号 数据量很大 使用treap树 简化每次查询的时间 缩短查询时树的深度 网上的treap模板http:原创 2016-04-07 21:07:32 · 313 阅读 · 0 评论 -
hdu1908
http://acm.hdu.edu.cn/showproblem.php?pid=1908利用二叉树的堆性质#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; struct node { int l,r,v,pro; int rnd; }原创 2016-04-13 20:02:57 · 371 阅读 · 0 评论 -
归并树&划分树详解
原文网址http://www.xuebuyuan.com/829409.html 红色的点是此节点中被划分到左子树的点。 我们一般用一个结构体数组来保存每个节点,和线段树不同的是,线段树每个节点值保存一段的起始位置和结束位置,而在划分树和递归树中,每个节点的每个元素都是要保存的。为了直观些,我们可以定义一个结构体数组,一个结构体中保存的是一层的元素和到某个节点进入左子树的元素的个数,不同于线原创 2016-04-09 18:19:18 · 972 阅读 · 0 评论 -
单向链表创建
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std;struct link { int data; struct link *next; };typedef struct link lb;lb *creatlink(int n) { lb *head,*p,*q;原创 2016-03-11 14:31:49 · 367 阅读 · 0 评论