leetcode中的状态机类型的题目

news/2024/10/17 19:30:46/

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. 删除注释【2024秋招后端面试题】

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.ppmy.cn/news/1279148.html

相关文章

【小白专用】HTML相对路径表示方法

一. HTML相对路径(Relative Path) 同一个目录的文件引用 如果源文件和引用文件在同一个目录里&#xff0c;直接写引用文件名即可。 我们现在建一个源文件info.html&#xff0c;在info.html里要引用index.html文件作为超链接。 假设info.html路径是&#xff1a;c:/Inetpub/ww…

Vue:defineAsyncComponent(异步组件)、component(动态组件)、keep-alive(缓存组件)

异步组件&#xff1a;defineAsyncComponent Vue3 的 defineAsyncComponent 特性可以让我们延迟加载组件。因为在默认情况下&#xff0c;在构建项目或运行项目时&#xff0c;会将所有所需要的打包成一个整体&#xff0c;vue为单页面应用&#xff0c;同步加载大量的页面代码会导…

JS逆向基础

JS逆向基础 一、什么是JS逆向&#xff1f;二、接口抓包三、逆向分析 一、什么是JS逆向&#xff1f; 我们在网站进行账号登录的时候对网页源进行抓包就会发现我们输入的密码在后台会显示为一串由字母或数字等符号&#xff0c;这就是经过加密呈现的一段加密文字&#xff0c;而分…

TCP的poll多路复用实现群聊

服务器 #include <myhead.h> #define SERIP "192.168.125.99" #define SERPORT 9999 int main(int argc, const char *argv[]) {int sfd-1;if((sfdsocket(AF_INET,SOCK_STREAM,0))-1){perror("socket error");return -1;}printf("sfd%d\n"…

内部FLASH模拟EPPROM

本例程基于STM32F103ZET6 FLASH大小为512K。 介绍FLASH 不同型号的 STM32&#xff0c;其 FLASH 容量也有所不同&#xff0c;最小的只有 16K 字节&#xff0c;最大的则达到了 1024K 字节。我们的精英 STM32 开发板选择的是 STM32F103ZET6 的 FLASH 容量为 512K 字节&#xff0…

计算机网络 网络安全技术

网络安全基本要素 机密性 不泄密完整性 信息不会被破坏可用性 授权用户 正常有效使用可控性 被控制可审查性 网络安全的结构层次 物理安全 物理介质安全控制 计算机操作系统安全服务 应用层次 被动攻击 :截获信息 主动攻击 : 中断信息,篡改,伪造 篡改 …

conda环境下执行conda命令提示无法识别解决方案

1 问题描述 win10环境命令行执行conda命令&#xff0c;报命令无法识别&#xff0c;错误信息如下&#xff1a; PS D:\code\cv> conda activate pt conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&a…

2023年12月GESP Python五级编程题真题解析

【五级编程题1】 【试题名称】&#xff1a;小杨的幸运数 【问题描述】 小杨认为&#xff0c;所有大于等于a的完全平方数都是他的超级幸运数。 小杨还认为&#xff0c;所有超级幸运数的倍数都是他的幸运数。自然地&#xff0c;小杨的所有超级幸运数也都是幸运数。 对于一个…