44 有效括号序列 45滑动窗口的最大值

news2024/12/27 13:05:50

44 有效括号序列

在这里插入图片描述
很容易想到用栈,但是一开始还是写得有问题

import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here

        Stack<Character> st = new Stack<>();
        
        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            if(c=='['||c=='('||c=='{'){
                st.push(c);
            }else if(st.isEmpty()){
                return false;//右括号数量更多
            }else if(c==']'){
                if(st.pop()!='[') return false;
            }else if(c==')'){
                if(st.pop()!='(') return false;
            }else if(c=='}'){
                if(st.pop()!='{') return false;
            }
            
        }
        if(!st.isEmpty()){//左括号数量更多
            return false;
        }
        else return true;
    }
}

可以用Stack<Character> st,一开始以为不能用Char,用字符串存的话需要转换,可以用String.ValueOf©来将char转换为String

用string来存调了半天的bug!!!因为字符串不能用==来判断是否相等!!!要用equals方法!!!

import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here

        Stack<String> st = new Stack<>();

        
        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            if(c=='['||c=='('||c=='{'){
                st.push(String.valueOf(c));
            }else if(st.isEmpty()){
                return false;//右括号数量更多
            }else if(c==']'){
                if(!st.pop().equals("[")) return false;
            }else if(c==')'){//!!!!!不能用!=来判断!!!
                if(!st.pop().equals("(")) return false;
            }else if(c=='}'){
                if(!st.pop().equals("{")) return false;
            }
            
        }
        if(!st.isEmpty()){//左括号数量更多
            return false;
        }
        else return true;
    }
}

45 滑动窗口的最大值

在这里插入图片描述
第一眼的想法是想像43题那样直接根据滑出和进入的比较,但是发现不可能的原因是43题的最小值永远是递减的,因为是栈的结构,之前在的会一直在,最差也是push和上次一样的值,但是这题就不行,相当于队列的结构,push的最大值是没有规律而言的。最简单的做法就是每次在窗口里判断最大值,这样时间复杂度是O(n*size),空间复杂度是O(1),存结果必须要开的数组不算入额外空间.不符合题目要求

import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        if(num.length<size||size==0) return new ArrayList<>();
        ArrayList<Integer> list = new ArrayList<>();    
        for(int i=0;i+size-1<num.length;i++){
            int max = Integer.MIN_VALUE;
            for(int j=i;j<i+size;j++){
                if(num[j]>max) max = num[j];
            }
            list.add(max);
        }
        return list;
        
    }
}

看了题解之后才懂了双端队列的做法:

  • 用双端对列q存index,假设队列左边为first,右边为last,每滑动一个窗口需要如下操作:
  • 每当当前数据要从last进入,要先把在队列中的且更小的元素poll出去,因为之前的数据更小,永远都没用了。
  • 根据下标判断窗口外的过期数据,在first端poll出去
  • 根据第一步,队列中的数据是非递增的,first端是最大的,把first的数据加入队列中即可
import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        if(num.length<size||size==0) return new ArrayList<>();
        ArrayList<Integer> list = new ArrayList<>();
        ArrayDeque<Integer> q = new ArrayDeque<>();
        int max = Integer.MIN_VALUE;
        int index=0;

        for(int end=0;end<num.length;end++){
            while(!q.isEmpty()&&num[q.peekLast()]<num[end]){
                q.pollLast();//去掉在新加入元素前面的且更小的
            }
            q.addLast(end);
            while(!q.isEmpty()&&q.peekFirst()<=end-size){
                q.pollFirst();//去掉窗口外的
            }
            if(end>=size-1)list.add(num[q.peekFirst()]);//前size个只要存一个
        }
        return list;
        
    }
}


这样时间复杂度O(n),空间复杂度O(size)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解 InnoDB ReplicaSet

详解 InnoDB ReplicaSetInnoDB ReplicaSet 是什么&#xff1f;InnoDB ReplicaSet 的优缺点InnoDB ReplicaSet 的限制部署 InnoDB ReplicaSet1. 准备两个 MySQL 实例添加新实例的配置选项到 /etc/my.cnf分别在两台主机上进行预配置2. 使用 MySQL Shell 连接到一个实例来配置两个…

海康安防平台对接

1.前置准备工作 1.1下载h5播放器 https://open.hikvision.com/download/5c67f1e2f05948198c909700?type10安装包解压 1.2配置nginx反向代理 将解压的h5放到nginx目录下 配置nginx配置文件,修改如下两个配置 server {listen 9051;server_name localhost;#charset …

Python密码锁屏窗体界面

程序示例精选 Python密码锁屏窗体界面 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python密码锁屏窗体界面》编写代码&#xff0c; 原理上没有采用Windows自带锁屏模块&#xff0c;是通过软…

通过左旋和右旋来实现搜索二叉树的自平衡

首先左旋和右旋的概念都是在平衡二叉树的基础上提出的。并对AVL树 SB树 红黑树在原理层面进行了简单的介绍&#xff0c;无coding。 什么是左旋&#xff1f; 假设存在下述平衡二叉树&#xff08;某个结点的左子节点都小于该结点&#xff0c;右子结点右大于大结点&#xff09;&…

初识单链表/单链表头指针的创建

链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构。链表不像数组中的元素那样&#xff0c;每个数据的的地址是连续的。数组的物理存储结构&#xff1a;数组中上一个数据的地址和下一个数据的地址是连续的&#xff0c;正好差一个整型大小 链…

做副业找不到好项目?公众号依旧是最优选择

大家好&#xff0c;我是蝶衣王的小编&#xff0c;今天分享一下公众号还是否值得做呢 说到做自媒体账号赚钱&#xff0c;有些人可能会说是2022年谁看公众号&#xff0c;阅读量都不如以前了&#xff0c;大家都跑去刷短视频。其实不错&#xff0c;但是对于不想露脸的人来说&#…

深圳大学数学文化赏析MOOC第二次作业答案(满分)

一、单选题 (共 40.00 分) 1. 以下各数集中&#xff0c;不可数的一个是&#xff08; &#xff09; A. 自然数集 B. 整数集 C. 有理数集 D. 无理数集 满分&#xff1a;2.00 分 得分&#xff1a;2.00 分 你的答案&#xff1a; D 正确答案&#xff1a; D 教师评…

java计算机毕业设计ssm重点实验室系统

项目介绍 本重点实验室系统是针对目前仓库的实际需求,从实际工作出发,对过去的重点实验室系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念、…

机器学习100天:目录

《机器学习100天》&#xff01;理论python&#xff01;实战真正的从零开始机器学习&#xff0c;循序渐进&#xff0c;适合初学者快速入门和进阶&#xff01; 思维导图&#xff1a; 第0章&#xff1a;准备工作 001 开发环境搭建 第1章&#xff1a;数据预处理 002 导入数据集 …

超级简单的vue课程设计电商购物系统,没有数据库文件,通过模拟数据操作

详细地址&#xff1a;《《《下载地址》》》 基于vue前端项目开发的电商购物系统&#xff0c;主要包括商品的列表、商品的详细页、加入购车、注册、用户登录用户等基本的功能。适合于课程设计&#xff0c;该项目的开发没有用到MYSQL数据库&#xff0c;通过模拟数据进行读取&…

转行如何自学Python并且找到工作,分享自己心得

我是25岁转行学python的。说实在&#xff0c;转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景&#xff0c;三流大学毕业&#xff0c;电子商务专业&#xff0c;学习能力一般&#xff0c;没啥特别技能&#xff0c;反正就很普通…

Charles mock数据:

前提&#xff1a;确保手机已和PC上的Charles代理链接成功。 我们在平时的业务开发中&#xff0c;经常有端上已开发完成&#xff0c;但后端接口还没有Ready的情况&#xff1b;或者需要接口频繁变更数据来测试各种case的情况。这样如果过度依赖接口&#xff0c;肯定会极大降低我…

[附源码]Node.js计算机毕业设计糕点销售网站Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

毕业设计-基于大数据的房地产数据分析与预测-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

【Numpy】Numpy光速起步(初学者必备基础知识)

Ding Jiaxiong【2022-12-16】 Gitee仓库:https://gitee.com/DingJiaxiong/machine-learning-study.git 文章目录导入numpy认识数组数组的更多信息创建基本数组添加、删除和排序元素数组的形状和大小重塑数组将一维数组转换为二维数组【即如何向数组中添加新轴】索引和切片从现有…

jsp+ssm计算机毕业设计病历管理系统设计【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Qt中几个函数的使用方法

一、把字符串转换成整形 demo1: QString str "FF"; bool ok; int hex str.toInt(&ok, 16); // hex 255, ok true int dec str.toInt(&ok, 10); // dec 0, ok false demo2: bool ok; QString line "123"; int line1 line.toInt(&ok)…

重新认识CSS的尺寸体系,熟悉但是不多

前情提要 为了丰富自己是知识体系&#xff08;为了日更薅羊毛&#xff09;&#xff0c;我最近频繁翻阅MDN的文档&#xff0c;果然MDN文档常看常新。 今天翻到CSS部分&#xff0c;然后发现width和height里&#xff0c;有几个属性值眼熟但是不多&#xff0c;值得好好研究一下&a…

马士兵内部共享—1658页《Java面试突击核心讲》

为助力广大程序员朋友 “面试造火箭”&#xff0c;小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》&#xff01; 面试神技——1658页《Java面试突击核心讲》 主要包含&#xff1a;Java基础、JVM、多线程、MySQL、Spring、SpringBoot、Spr…

HTML期末作业 蛋糕bootstrap响应式网站html+css+javascript+jquery+bootstarp

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…