7月算法训练------第十四天(栈)解题报告
7月算法训练------第十四天(栈)解题报告
题目类型:栈
题目难度:简单
第一题、1614. 括号的最大嵌套深度
- 题目链接:1614. 括号的最大嵌套深度
- 思路分析:
遍历整个字符串,如果是'('
,则将其压入栈中;
如果是')'
,则将栈的长度记录一下哎,然后压出一个')'
。
当记录栈长度的ArrayList
在循环完之后,还为空,则说明输入的字符串中不含'('
和‘)'
。
将ArrayList
中的最大值返回。 - 代码:
class Solution {public int maxDepth(String s) {// if(s.length() <= 1) return 0;char[] ch = s.toCharArray();ArrayList<Integer> list = new ArrayList();LinkedList<Character> clist = new LinkedList();// int sum;for(char c : ch){if(c == '('){clist.push('(');}if(c == ')'){list.add(clist.size());clist.pop();}}if(list.isEmpty()) return 0;Integer[] a = new Integer[list.size()];list.toArray(a);Arrays.sort(a);return a[a.length - 1];}
}
第二题、剑指 Offer 06. 从尾到头打印链表
- 题目链接:剑指 Offer 06. 从尾到头打印链表
- 思路分析:
遍历整个链表,将链表的元素用栈存储起来,然后申请一个长度和栈的长度一样的数组,将栈内元素压出,赋给数组。 - 代码:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
class Solution {public int[] reversePrint(ListNode head) {Stack<Integer> st = new Stack();while(head != null){st.push(head.val);head = head.next;}int[] a = new int[st.size()];for(int i = 0; i < a.length; i++){a[i] = st.pop();}return a;}
}
第三题、1381. 设计一个支持增量操作的栈
- 题目链接:1381. 设计一个支持增量操作的栈
- 思路分析:
用一个LinkedList stack
来表示这个栈;定义一个int
型数maxSize
表示最大容量
CustomStack(int maxSize)
:将stack
创建对象,给maxSize赋值;push(int x)
:如果stack
的长度大于maxSize
,则说明不能继续添加,所以直接返回;否则,就将x
加入stack
的末尾。pop()
:如果stack
长的为0
,则说明stack
中没数,返回-1
;否则,将stack
的末尾值删除并返回。increment(int k, int val)
:如果stack
的长度小于k
,则说明stack
中所有值都要加val
,所以遍历整个stack
,将stack
中的数都加val
;否则,就遍历stack
中前k
个元素,将他们加val
。
- 代码:
class CustomStack {LinkedList<Integer> stack;int maxSize;public CustomStack(int maxSize) {this.maxSize = maxSize;stack = new LinkedList();}public void push(int x) {if(stack.size() >= maxSize){return;}else{stack.addLast(x);}}public int pop() {if(stack.size() == 0) return -1;return stack.removeLast();}public void increment(int k, int val) {if(stack.size() <= k){for(int i = 0; i < stack.size(); i++){int a = stack.get(i);stack.set(i, a+val);}}else{for(int i = 0; i < k; i++){int a = stack.get(i);stack.set(i, a+val);}}}
}/*** Your CustomStack object will be instantiated and called as such:* CustomStack obj = new CustomStack(maxSize);* obj.push(x);* int param_2 = obj.pop();* obj.increment(k,val);*/
第四题、1441. 用栈操作构建数组
- 题目链接:1441. 用栈操作构建数组
- 思路分析:
用一个栈模拟加入过程,将num加入到栈中(1<=num<=n)。并将"Push"加入答案中,如果栈顶元素与数组元素不相等时,则说明需要将数字弹出栈,所以就将"Pop"加入答案;当相等时,说明需要遍历下一个数字,将index++; - 代码:
class Solution {private final static String PUSH = "Push";private final static String POP = "Pop";public List<String> buildArray(int[] target, int n) {List<String> ans = new ArrayList<>();Stack<Integer> stack = new Stack<>();for (int num = 1, index = 0; num <= n && index < target.length; ++num) {stack.add(num);ans.add(PUSH);if (target[index] != stack.peek()) {stack.pop();ans.add(POP);} else index++; }return ans;}
}
7月算法训练------第十四天(栈)解题报告相关推荐
- 算法系列之十四:狼、羊、菜和农夫过河问题
算法系列之十四:狼.羊.菜和农夫过河问题 题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷 ...
- leetcode算法专题训练:十四.位操作专题
文章目录 十四.位操作专题 50.Pow(x,n) 69.x的平方根 136.只出现一次的数字 137.只出现一次的数字2 260.只出现一次的数字3 89.格雷编码 剑指 Offer 64. 求1+ ...
- 【Java数据结构与算法】第十四章 红黑树
第十四章 红黑树 文章目录 第十四章 红黑树 一.红黑树 1.介绍 2.插入结点 3.删除结点 4.与平衡二叉树的对比 一.红黑树 1.介绍 红黑树(Red Black Tree)是平衡二叉树的其中一 ...
- NOIP2012普及组 (四年后的)解题报告 -SilverN
本章施工仍未完成 现在的时间是3.17 0:28,我困得要死 本来今天(昨天?)晚上的计划是把整个四道题的题解写出来,但是到现在还没写完T4的高效算法,简直悲伤. 尝试了用floyd写T4,终于大功告 ...
- 数据结构与算法笔记(十四)—— 二叉树
一.二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree) 和"右子树"(right subtree). ...
- 夜深人静写算法(三十四)- 逆元
文章目录 一.前言 二.逆元的概念 1.单位元 2.逆元 3.模乘的单位元 4.模乘的逆元 三.逆元的求解 1.扩展欧几里德定理 2.费马小定理 3.线性递推 四.逆元的应用 1.前缀积差分 2.逆元 ...
- 狼羊菜过河问题c语言算法,算法系列之十四:狼、羊、菜和农夫过河问题
题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊.请考虑一种方法,让农夫能够 ...
- JAVA入门算法题(十四)
一.最小的淘气值 题目: /*** 老师要给学生安排座位,经统计教室有N个双人桌,M名学生,每个学生有一个淘气值,* 要合理安排座位,使得班内同桌之和的淘气值最大值尽可能的小,输出最小值.*/ 这是一 ...
- 机器学习算法(二十四):最近邻算法 KNN(k-nearest neighbor)
目录 1 基于实例的学习 2 k-最近邻法 2.1 算法概述 2.2 kNN算法的一般流程 2.3 距离公式 2.4 k值的选择 2.5 KNN特点 2.5.1 特点 2.5.2 KNN算法的优势和劣 ...
最新文章
- 进程、应用程序域、程序集、对象上下文区别与联系
- 洞悉物联网发展1000问之从精益管理到互联工业带来的启示是什么?
- Linux Top 命令解析 比较详细--转
- Linux统计某个文件夹下的文件个数、目录个数
- 为什么 Kafka 速度那么快?
- 启明云端方案分享| ESP32-S2 摄像头 WIFI方案应用于智能猫眼
- python selenium 等待元素出现_Python Selenium等待加载几个元素
- Java7----ForkJoin框架
- idea服务器如何手动加载项目,idea导入本地idea的web项目(服务器用的是tomcat)
- 项目管理学习总结(17)——关于前后端分离的分析
- sql domain credentail
- python装饰器的应用案例
- python图片加透明通道并将背景设为透明
- pe和linux一起安装到移动硬盘,PE安装在移动硬盘的详细教程
- 「随笔」我的导师离职了...
- 读论文 Automatic generation and detection of highly reliable fiducial markersnunder occlusion
- autojs自定义Switch
- 手机APP开发之MIT Appinventor详细实战教程(一),利用通过蓝牙控制单片机,以及实现单片机与android设备之间的串口通信
- 基于React的Alita框架的jest用法
- 微信小程序 自动解决分包大小问题_2020微信小程序前端面试题汇总