算法练习笔记——栈的常用方法以及算法练习

简介: 算法练习笔记——栈的常用方法以及算法练习

@TOC

常用方法介绍

     Stack<Character> characters = new Stack<>();
        //判断栈是否为空
        boolean empty = characters.empty();
        //将a压入栈底,同时也返回a
        Character push = characters.push('a');
        //返回栈顶的元素但是并不会删除它
        Character peek = characters.peek();
        //返回栈顶的元素,并将它删除
        Character pop = characters.pop();
        //在堆栈中搜索a,如果发现了,则返回它相对于栈顶
        //的偏移量。否则,返回-1。
        int search = characters.search('a');
        boolean empty1 = characters.isEmpty();

力扣练习

力扣 20. 有效的括号

在这里插入图片描述

解法一

class Solution {
     
   
   
    Stack<Character> characters = new Stack<>();
    public boolean isValid(String s) {
     
   
   
       char[] chars = s.toCharArray();
       for(int i=0;i<s.length();i++)
       {
     
   
   
        if(chars[i]=='(') characters.push(')');
        else if(chars[i]=='{
     
   
   ') characters.push('}');
        else if(chars[i]=='[') characters.push(']');
        else if(characters.isEmpty()||chars[i]!=characters.pop()) return false;
       }
       return characters.isEmpty();                                                                         

    }
}

思路:
利用到了栈的后入先出的特性
利用左半边的进行判断。如果与之对应就将对应的入栈,下次如果不是左边的,就将栈里面的与之比较相同出栈。

力扣 32. 最长有效括号

在这里插入图片描述

class Solution {
     
   
   
    public int longestValidParentheses(String s) {
     
   
   
        int maxans=0;
        Stack<Integer> stack = new Stack<>();
        stack.push(-1);
        if(s.length()==0||s.length()==1){
     
   
   
            return 0;
        }
        char[] chars = s.toCharArray();
        for(int i=0;i<s.length();i++){
     
   
   
            if(chars[i]=='(') stack.push(i);
            else{
     
   
   
                stack.pop();
                if(stack.isEmpty()){
     
   
   
                     stack.push(i);
                }
                else{
     
   
   
                     maxans = Math.max(maxans, i-stack.peek());
                }
            }
        }
       return maxans;

    }
}

思路分析:
首先我的第一反应是用栈,当遇到(时,将其入栈,遇到)时将栈顶元素弹出,这样可以实现()的匹对
但是需要的是找出记录出长度和找出最长字符串
我们先定义一个maxans 即最长字符串
接下来我们需要找出最长字符串
我们可以先将字符串转为数组,利用其元素下标,求出最长字符串:
思路就是我们可以将元素下标入栈,记录下最后一个不匹配的元素下标,这样两次做差就可以求出,在每一次都用数学函数找出最大的数据记录
由于第一次没有元素我们可以先将-1入栈

相关文章
|
2月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
117 4
|
3月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
61 3
|
8天前
|
算法
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
|
2月前
|
存储 算法 安全
SnowflakeIdGenerator-雪花算法id生成方法
SnowflakeIdGenerator-雪花算法id生成方法
25 1
|
3月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
105 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
2月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
JSON 算法 数据挖掘
基于图论算法有向图PageRank与无向图Louvain算法构建指令的方式方法 用于支撑qwen agent中的统计相关组件
利用图序列进行数据解读,主要包括节点序列分析、边序列分析以及结合节点和边序列的综合分析。节点序列分析涉及节点度分析(如入度、出度、度中心性)、节点属性分析(如品牌、价格等属性的分布与聚类)、节点标签分析(如不同标签的分布及标签间的关联)。边序列分析则关注边的权重分析(如关联强度)、边的类型分析(如管理、协作等关系)及路径分析(如最短路径计算)。结合节点和边序列的分析,如子图挖掘和图的动态分析,可以帮助深入理解图的结构和功能。例如,通过子图挖掘可以发现具有特定结构的子图,而图的动态分析则能揭示图随时间的变化趋势。这些分析方法结合使用,能够从多个角度全面解读图谱数据,为决策提供有力支持。
108 0
|
3月前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
51 2
|
3月前
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
91 1
|
3月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
82 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)

热门文章

最新文章