hot100之栈
有效的括号(020)
跳过
最小栈(155)
class MinStack {
private final Deque<int[]> stack = new ArrayDeque<>();
public MinStack() {
stack.addLast(new int[]{0, Integer.MAX_VALUE});
}
public void push(int val) {
stack.addLast(new int[]{val, Math.min(stack.peekLast()[1], val)});
}
public void pop() {
stack.removeLast();
}
public int top() {
return stack.peekLast()[0];
}
public int getMin() {
return stack.peekLast()[1];
}
}
- 分析
使用双端队列作栈
利用动态规划, 每个栈元素维护自身val和min_val
字符串解码(394)
class Solution {
public String decodeString(String s) {
int idx = 0;
StringBuilder builder = new StringBuilder();
while (idx < s.length()){
// 是字母
if (s.charAt(idx) >= 'a'){
builder.append(s.charAt(idx));
idx++;
continue;
}
idx = appendDupString(idx, s, builder);
//是数字
}
return builder.toString();
}
private int appendDupString(int idx, String s , StringBuilder builder){
int prefix_count = 0;
while(s.charAt(idx) != '['){
prefix_count = prefix_count * 10 + s.charAt(idx) - '0';
idx++;
}
int rig_idx = idx+1;
int nest = 1;
while (nest != 0){
if (s.charAt(rig_idx) == '[') nest++;
else if (s.charAt(rig_idx) == ']') nest--;
rig_idx++;
}
String subString = decodeString(s.substring(idx+1, rig_idx-1));
for (int i = 0; i < prefix_count; i++){
builder.append(subString);
}
return rig_idx;
}
}
- 分析
递归调用
每日温度(739)
栈解法
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
int[] res = new int[n];
Deque<Integer> stack = new ArrayDeque<>();
for (int i = n-1; i >= 0; i--){
int t = temperatures[i];
while(!stack.isEmpty() && t >=temperatures[stack.peek()]){
stack.pop();
}
if (!stack.isEmpty()){
res[i] = stack.peek() - i;
}
stack.push(i);
}
return res;
}
}
跳表解法
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
int[] res = new int[n];
for (int i = n-2; i >= 0; i--){
for (int j = i+1; j < n; j += res[j]){
if (temperatures[j] > temperatures[i]){
res[i] = j - i;
break;
}
else if (res[j] == 0){
res[i] = 0;
break;
}
}
}
return res;
}
}
- 分析
栈解法
栈用于维护<最近><关联>数据
维护栈的单调性就是在维护栈组中的数据的<关联>性, 栈自身的性质可以用于保持<最近>特性
跳表解法
可能也许这是贪心
柱状图中最大矩形(084)
class Solution {
public int largestRectangleArea(int[] heights) {
int n = heights.length;
Deque<Integer> stack = new ArrayDeque<>();
stack.push(-1);
int res = 0;
for (int rig = 0; rig <= n; i++){
int h = rig < n ? heights[rig] : -1;
while(stack.size() > 1 && h <= heights[stack.peek()]){
int height = heights[stack.pop()];
int lef = stack.peek();
res = Math.max(res, height * (rig - lef - 1));
}
stack.push(rig);
}
return
}
}
- 分析
维护栈的单调性, 非单调时弹出数据作max比较
hot100之栈的更多相关文章
- leadcode的Hot100系列--155. 最小栈
栈:先入后出,后入先出 像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口, 所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来. push,对应入电梯,把数据往里面压 po ...
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- duang~免费的学习视频来啦:学霸君之全栈测试
学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
- .NET全栈开发工程师学习路径
PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...
- Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解
用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...
随机推荐
- centos7 docker卸载老版本并升级到最新稳定版本
一.前言 docker的版本分为社区版docker-ce和企业版dokcer-ee社,区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器.插 ...
- PHP 读取csv中的指定某些列的值
封装一个方法,用于从CSV文件中读取指定的某些列的值时,可以使用以下示例代码: <?php class CSVReader { private $filename; private $delim ...
- Linux基本开发环境配置git,c++,nodejs,nginx
Linux基本开发环境配置 前一篇文章配置了基本的SSH,本文来讲讲关于基本的开发环境的配置,包括git,c,c++,nodejs,nginx. 安装git和配置无密码登录github yum ins ...
- 使用Python解决三体问题
引言 在物理学中,三体问题是一个经典的动态系统问题,它描述了三个天体之间的相互引力作用和运动规律.三体问题最著名的挑战在于它无法通过简单的解析公式来解决,换句话说,三体问题是一个不可解析的问题.尽管如 ...
- Rocketmq 如何保证消息的可用性/可靠性/不丢失呢 ?
如何保证消息的可用性/可靠性/不丢失呢 ? 消息可能在哪些阶段丢失呢?可能会在这三个阶段发生丢失:生产阶段.存储阶段.消费阶段 生产阶段 在生产阶段,主要通过请求确认机制,来保证消息的可靠传递 1.同 ...
- Eclipse java项目转Maven项目
1.右键项目->configure->选择maven->配置maven的pom.xml 2.在src/main下新建java文件,将原来src下的java文件夹拷贝至该目录下: 3. ...
- Mouse Down鼠标操作指令的用法
如下图 暂无评论的按钮在整页下方,需要拖动页面才会显示出这个按钮,否则不可点击 Mouse Down 提供拖动页面的能提 这个方法因selenium2library和AutoItLibrary 都有 ...
- [笔记]PHP里类的申明和对象的实例化(笔记)
1.申明类 class 类名{ //属性---------- public 属性 = 值: public 属性: //方法----------- function 方法名($n1,$n2){ ...
- tp5 分页权限权限设置显示
$adminid = cookie("adminid"); $shop_id=$this->get_shop_id(); if($adminid==1){ $uid = in ...
- Python实验3 函数与代码复用
目的:理解函数封装与递归思想 实验任务: 基础 :编写函数cal_factorial(n)计算阶乘(循环实现). 源码: def cal_factorial(n): result = 1 for i ...