7月算法训练------第十四天(栈)解题报告

题目类型:栈
题目难度:简单

第一题、1614. 括号的最大嵌套深度

  1. 题目链接:1614. 括号的最大嵌套深度
  2. 思路分析:
    遍历整个字符串,如果是'(',则将其压入栈中;
    如果是')',则将栈的长度记录一下哎,然后压出一个')'
    当记录栈长度的ArrayList在循环完之后,还为空,则说明输入的字符串中不含'('‘)'
    ArrayList中的最大值返回。
  3. 代码:
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. 从尾到头打印链表

  1. 题目链接:剑指 Offer 06. 从尾到头打印链表
  2. 思路分析:
    遍历整个链表,将链表的元素用栈存储起来,然后申请一个长度和栈的长度一样的数组,将栈内元素压出,赋给数组。
  3. 代码:
/*** 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. 设计一个支持增量操作的栈

  1. 题目链接:1381. 设计一个支持增量操作的栈
  2. 思路分析:
    用一个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
  1. 代码:
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. 用栈操作构建数组

  1. 题目链接:1441. 用栈操作构建数组
  2. 思路分析:
    用一个栈模拟加入过程,将num加入到栈中(1<=num<=n)。并将"Push"加入答案中,如果栈顶元素与数组元素不相等时,则说明需要将数字弹出栈,所以就将"Pop"加入答案;当相等时,说明需要遍历下一个数字,将index++;
  3. 代码:
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月算法训练------第十四天(栈)解题报告相关推荐

  1. 算法系列之十四:狼、羊、菜和农夫过河问题

    算法系列之十四:狼.羊.菜和农夫过河问题 题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷 ...

  2. leetcode算法专题训练:十四.位操作专题

    文章目录 十四.位操作专题 50.Pow(x,n) 69.x的平方根 136.只出现一次的数字 137.只出现一次的数字2 260.只出现一次的数字3 89.格雷编码 剑指 Offer 64. 求1+ ...

  3. 【Java数据结构与算法】第十四章 红黑树

    第十四章 红黑树 文章目录 第十四章 红黑树 一.红黑树 1.介绍 2.插入结点 3.删除结点 4.与平衡二叉树的对比 一.红黑树 1.介绍 红黑树(Red Black Tree)是平衡二叉树的其中一 ...

  4. NOIP2012普及组 (四年后的)解题报告 -SilverN

    本章施工仍未完成 现在的时间是3.17 0:28,我困得要死 本来今天(昨天?)晚上的计划是把整个四道题的题解写出来,但是到现在还没写完T4的高效算法,简直悲伤. 尝试了用floyd写T4,终于大功告 ...

  5. 数据结构与算法笔记(十四)—— 二叉树

    一.二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree) 和"右子树"(right subtree). ...

  6. 夜深人静写算法(三十四)- 逆元

    文章目录 一.前言 二.逆元的概念 1.单位元 2.逆元 3.模乘的单位元 4.模乘的逆元 三.逆元的求解 1.扩展欧几里德定理 2.费马小定理 3.线性递推 四.逆元的应用 1.前缀积差分 2.逆元 ...

  7. 狼羊菜过河问题c语言算法,算法系列之十四:狼、羊、菜和农夫过河问题

    题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊.请考虑一种方法,让农夫能够 ...

  8. JAVA入门算法题(十四)

    一.最小的淘气值 题目: /*** 老师要给学生安排座位,经统计教室有N个双人桌,M名学生,每个学生有一个淘气值,* 要合理安排座位,使得班内同桌之和的淘气值最大值尽可能的小,输出最小值.*/ 这是一 ...

  9. 机器学习算法(二十四):最近邻算法 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算法的优势和劣 ...

最新文章

  1. 进程、应用程序域、程序集、对象上下文区别与联系
  2. 洞悉物联网发展1000问之从精益管理到互联工业带来的启示是什么?
  3. Linux Top 命令解析 比较详细--转
  4. Linux统计某个文件夹下的文件个数、目录个数
  5. 为什么 Kafka 速度那么快?
  6. 启明云端方案分享| ESP32-S2 摄像头 WIFI方案应用于智能猫眼
  7. python selenium 等待元素出现_Python Selenium等待加载几个元素
  8. Java7----ForkJoin框架
  9. idea服务器如何手动加载项目,idea导入本地idea的web项目(服务器用的是tomcat)
  10. 项目管理学习总结(17)——关于前后端分离的分析
  11. sql domain credentail
  12. python装饰器的应用案例
  13. python图片加透明通道并将背景设为透明
  14. pe和linux一起安装到移动硬盘,PE安装在移动硬盘的详细教程
  15. 「随笔」我的导师离职了...
  16. 读论文 Automatic generation and detection of highly reliable fiducial markersnunder occlusion
  17. autojs自定义Switch
  18. 手机APP开发之MIT Appinventor详细实战教程(一),利用通过蓝牙控制单片机,以及实现单片机与android设备之间的串口通信
  19. 基于React的Alita框架的jest用法
  20. 微信小程序 自动解决分包大小问题_2020微信小程序前端面试题汇总

热门文章

  1. ARC 强变量 弱变量
  2. 婚庆摄影公司网站源码搭建
  3. 教你剪辑调整视频亮度、饱和度,一个视频调整出不同画面颜色
  4. 十八、阿里云api调用
  5. LTE-TDD资源调度(1)-QCI、GBR和Non-GBR
  6. 功夫茶篇∞潮州工夫茶:通古今之变
  7. QT实现OPC_UA客户端程序以及与OPC_UA服务器通信
  8. 了解音频频率范围和音频元器件
  9. java从数据库读取zip文件的字节数组byte[]直接解压
  10. P5692 手牵手走向明天