leetcode中的状态机类型的题目

news2025/9/20 1:46:55

1 总结

2 LC57. 插入区间

在这里插入图片描述

2.1 解析

先是要确定新区间插入到哪一个位置(也有可能),插入后需要确定这个区间是否涉及到合并问题。
所以我们可以设计一个flag变量,确定区间是否插入,插入完成则进行到区间合并阶段。

2.2 代码:beat 95% commits in time complexity

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        int n=intervals.length;

        List<int[]>ans=new ArrayList<>();
        boolean f=false;//表示现待处理新区间的插入状态,f=true则表示处理完成,开启合并区间的状态
        for(int i=0;i<n;){
            int[] interval=intervals[i];
            if(!f){
                if(interval[1]<newInterval[0]){
                    ans.add(interval);
                    i++;
                }else if(interval[1]>=newInterval[0]&&interval[1]<=newInterval[1]){
                    int[]ni=new int[]{Math.min(interval[0],newInterval[0]),Math.max(interval[1], newInterval[1])};
                    ans.add(ni);
                    f=true;
                    i++;
                }else if(interval[0]>newInterval[1]){
                    ans.add(newInterval);
                    f=true;
                }else if(interval[0]<=newInterval[0]&&interval[1]>=newInterval[1]){
                    ans.add(interval);
                    f=true;
                    i++;
                }else if(interval[0]>=newInterval[0]&&interval[0]<=newInterval[1]){
                    ans.add(new int[]{newInterval[0],interval[1]});
                    f=true;
                    i++;
                }
            }else {
                // 转换为合并区间问题
                int[]li=ans.get(ans.size()-1);
                if(li[1]<interval[0]){
                    ans.add(interval);
                }else if(li[1]>=interval[0]){
                    int[]newi=new int[]{Math.min(li[0],interval[0]),Math.max(li[1],interval[1])};
                    ans.remove(ans.size()-1);
                    ans.add(newi);
                }
                i++;
                
            }
        }
        // 如果f一直是false,则说明新区间加在末尾
        if(!f){
            ans.add(newInterval);
        }
        int[][]res=new int[ans.size()][2];
        for(int i=0;i<ans.size();i++){
            res[i]=ans.get(i);
        }
        return res;
    }
}

3 LC722. 删除注释

3.1 分析

这道题的状态机的状态稍多,题目稍复杂

3.2 代码:beat 100% commits in time complexity

    // 假设注释内有了
    public List<String> removeComments(String[] source) {

        List<String>res=new ArrayList<>();
        StringBuilder sb=new StringBuilder();
        // 0:初始状态,1:行注释,2:块注释,3:引号
        // 1->0, 2->0, 

        int flag=0;
        int n=source.length;
        for(int i=0;i<n;i++){
            String str=source[i];
            char cs[]=str.toCharArray();
            int m=cs.length;

            for(int j=0;j<m;){
                // 只能在初始状态转为行注释状态
                if(j<m-1&&flag==0&&cs[j]=='/'&&cs[j+1]=='/'){
                    String addStr=sb.toString();
                    if(!"".equals(addStr)&&addStr!=null){
                        res.add(addStr);
                    }
                    sb=new StringBuilder();
                    flag=1;
                    j+=2;
                    break;
                }
                // 只能在初始状态转为多行注释状态
                if(j<m-1&&flag==0&&cs[j]=='/'&&cs[j+1]=='*'){

                    flag=2;
                    j+=2;
                    continue;
                }
                // 在多行注释的状态下转换为初始状态
                if(j<m-1&&flag==2&&cs[j]=='*'&&cs[j+1]=='/'){

                    flag=0;
                    j+=2;
                    continue;
                }
                // 开启引号状态
                if(j<m-1&&flag==0&&cs[j]=='"'){
                    flag=3;
                }
                // 关闭引号状态
                if(j<m-1&&flag==3&&cs[j]=='"'){
                    flag=0;
                }

                //处于引号或者初始状态的字符都可以被加入
                if(flag==0||flag==3){
                    sb.append(cs[j]);
                    j++;
                    continue;
                }
                j++;
            }
            // 当正常状态时,每一次换行都需要添加到res结果集中
            if(flag==0){
                String addStr=sb.toString();
                if(!"".equals(addStr)&&addStr!=null){
                    res.add(addStr);
                }
                sb=new StringBuilder();
            }
            // 当换行时,行注释状态自动回到初始状态
            if(flag==1){
                sb=new StringBuilder();
                flag=0;
            }
        }
        return res;
    }

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

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

相关文章

工业信息采集平台的五大核心优势

关键字&#xff1a;工业信息采集平台,蓝鹏数据采集系统,蓝鹏测控系统, 生产管控系统, 生产数据处理平台,MES系统数据采集, 蓝鹏数据采集平台通过实现和构成其他工业数据信息平台的一级设备进行通讯&#xff0c;从而完成平台之间的无缝对接。这里我们采用的最多的方式是和PLC进行…

AI“百模大战”现状:向垂直、B端谋场景,算力仍是主要制约因素

文章目录 每日一句正能量前言AI&#xff08;人工智能&#xff09;大模型正“飞入”百姓家和行业中。向垂直、B端谋场景算力仍是主要制约因素构建“数据-模型-应用”飞轮后记 每日一句正能量 我们必须在失败中寻找胜利&#xff0c;在绝望中寻求希望。 前言 在当前快速发展的人工…

Docker与容器化安全:漏洞扫描和安全策略

容器化技术&#xff0c;特别是Docker&#xff0c;已经成为现代应用程序开发和部署的关键工具。然而&#xff0c;容器化环境也面临着安全挑战。为了保障容器环境的安全性&#xff0c;本文将介绍如何进行漏洞扫描、制定安全策略以及采取措施来保护Docker容器。我们将提供丰富的示…

pvk2pfx.exe makecert.exe 文件路径

文件路径 C:\Program Files (x86)\Windows Kits\10\bin\XXXXX\x86

CSS新手入门笔记整理:CSS3弹性盒模型

特点 子元素宽度之和小于父元素宽度&#xff0c;所有子元素最终的宽度就是原来定义的宽度。子元素宽度之和大于父元素宽度&#xff0c;子元素会按比例来划分宽度。在使用弹性盒子模型之前&#xff0c;必须为父元素定义“display:flex;”或“display:inline-flex;”。 弹性盒子…

Chart.js:灵活易用的图表库 | 开源日报 No.121

chartjs/Chart.js Stars: 61.3k License: MIT Chart.js 是一个简单而灵活的 JavaScript 图表库&#xff0c;适用于设计师和开发者。 灵活性&#xff1a;Chart.js 提供了丰富多样的图表类型和配置选项&#xff0c;使用户能够根据自己的需求创建各种定制化的图表。易用性&#…

【Python必做100题】之第二十六题(小球反弹问题)

题目&#xff1a;一小球从100米高度自由落体落下&#xff0c;每次落地后反跳回原来高度的一半再落下&#xff0c;求它在第10次落地时&#xff0c;共经过多少米&#xff1f;第10次反弹多高&#xff1f; 思路&#xff1a;初始为100米&#xff0c;落下反弹为原来的一半&#xff1…

Leetcode 剑指 Offer II 058. 我的日程安排表 I

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 请实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内…

基于ip地址通过openssl生成自签名证书

最近在配置geo的时候&#xff0c;客户说自己使用的是自签证书&#xff0c;然后是通过ip地址和端口的方式访问gitlab&#xff0c;比较好奇这块&#xff0c;因此对证书的生成和使用做了一些整理&#xff0c;对此网上关于这部分资料也很多&#xff0c;不过作为记录&#xff0c;也算…

模型推理加速系列 | 08:TensorRT-LLM助力LLM高性能推理

引言 ​ 日暮苍山远&#xff0c;天寒白屋贫。Created by DALLE 3 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&#xff1a;卖汤圆的小女孩&#xff0c;今天是冬至&#xff0c;祝福小伙伴们幸福安康吧。紧接前文&#xff1a; 万字长文细说ChatGPT的前世今生 Llam…

DBeaver中使用外部格式化程序对进行sql格式化

本文介绍了如何在DBeaver中使用pgFormatter、sqlprase、sqlformatter等外部格式化程序对sql进行格式化。 目录 一、pgFormatter 1.准备工作 2.DBeaver中进行配置 二、sqlprase 1.准备工作 2.在DBeaver中配置 三、sql-formatter 1.准备工作 2.在DBeaver中配置 一、pgF…

机场信息集成系统系列介绍(6):机场协同决策支持系统ACDM

目录 一、背景介绍 1、机场协同决策支持系统是什么&#xff1f; 2、发展历程 3、机场协同决策参与方 4、相关定义 二、机场协同决策ACDM的建设目标 &#xff08;一&#xff09;机场协同决策支持系统的宏观目标 1、实现运行数据共享和前序航班信息透明化 2、实现地面资源…

基于Java web的住院管理系统论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

otter-harbor同步

一. 部署及依赖 otter Github (一). 服务启动 1. mysql 5.6版本以上&#xff0c;作为 otter-manger 使用的数据库 # mysql docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 --character-set-serverutf8mb4 --collation-serverutf8mb4_un…

第11章 GUI Page421~422 步骤六 支持文字

运行效果&#xff1a; 关键代码&#xff1a; 新增头文件&#xff1a; //item_text.hpp #ifndef ITEM_TEXT_HPP_INCLUDED #define ITEM_TEXT_HPP_INCLUDED #include "item_i.hpp"class TextItem : public IItem { public:TextItem(): _startPosition(0, 0), _endPos…

论文推荐:大型语言模型能自我解释吗?

这篇论文的研究主要贡献是对LLM生成解释的优缺点进行了调查。详细介绍了两种方法&#xff0c;一种是做出预测&#xff0c;然后解释它&#xff0c;另一种是产生解释&#xff0c;然后用它来做出预测。 最近的研究发现&#xff0c;即使LLM是在特定数据上训练的&#xff0c;也不能认…

SpringMVC系列之技术点定向爆破二

SpringMVC的运行流程 客户端发送请求 tomcat接收对应的请求 SpringMVC的核心调度器DispatcherServlet接收到所有请求 请求地址与RequestMapping注解进行匹配&#xff0c;定位到具体的类和具体的处理方法&#xff08;封装在Handler中&#xff09; 核心调度器找到Handler后交…

c语言:计算1+2+3……+n的和|练习题

一、题目 输入一个数n&#xff0c;计算123……n的和 二、代码截图【带注释】 三、源代码【带注释】 #include int main() { int num0; printf("请输入要运算的数:"); scanf("%d",&num); sumResult(num);//相加结果函数 } //计算打印…

关于“Python”的核心知识点整理大全37

目录 13.6.2 响应外星人和飞船碰撞 game_stats.py settings.py alien_invasion.py game_functions.py ship.py 注意 13.6.3 有外星人到达屏幕底端 game_functions.py 13.6.4 游戏结束 game_stats.py game_functions.py 13.7 确定应运行游戏的哪些部分 alien_inva…

3dsmax渲染太慢,用云渲染农场多少钱?

对于许多从事计算机图形设计的创作者来说&#xff0c;渲染速度慢是一个常见问题&#xff0c;尤其是对于那些追求极致出图效果的室内设计师和建筑可视化师&#xff0c;他们通常使用3ds Max这样的工具&#xff0c;而高质量的渲染经常意味着长时间的等待。场景复杂、细节丰富&…