南宁网站建设liluokj,html5电影网站建设,网站模板编辑工具,贵阳网站建设q479185700惠1 总结
一般是涉及到多个状态之间的转换#xff0c;需要定义一个具有多个枚举值的变量#xff0c;各个状态之间通过各种条件互相变化
2 LC57. 插入区间 2.1 解析
先是要确定新区间插入到哪一个位置#xff08;也有可能#xff09;#xff0c;插入后需要确定这个区间是否…1 总结
一般是涉及到多个状态之间的转换需要定义一个具有多个枚举值的变量各个状态之间通过各种条件互相变化
2 LC57. 插入区间 2.1 解析
先是要确定新区间插入到哪一个位置也有可能插入后需要确定这个区间是否涉及到合并问题。 所以我们可以设计一个flag变量确定区间是否插入插入完成则进行到区间合并阶段。
2.2 代码beat 95% commits in time complexity
class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {int nintervals.length;Listint[]ansnew ArrayList();boolean ffalse;//表示现待处理新区间的插入状态ftrue则表示处理完成开启合并区间的状态for(int i0;in;){int[] intervalintervals[i];if(!f){if(interval[1]newInterval[0]){ans.add(interval);i;}else if(interval[1]newInterval[0]interval[1]newInterval[1]){int[]ninew int[]{Math.min(interval[0],newInterval[0]),Math.max(interval[1], newInterval[1])};ans.add(ni);ftrue;i;}else if(interval[0]newInterval[1]){ans.add(newInterval);ftrue;}else if(interval[0]newInterval[0]interval[1]newInterval[1]){ans.add(interval);ftrue;i;}else if(interval[0]newInterval[0]interval[0]newInterval[1]){ans.add(new int[]{newInterval[0],interval[1]});ftrue;i;}}else {// 转换为合并区间问题int[]lians.get(ans.size()-1);if(li[1]interval[0]){ans.add(interval);}else if(li[1]interval[0]){int[]newinew 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[][]resnew int[ans.size()][2];for(int i0;ians.size();i){res[i]ans.get(i);}return res;}
}3 LC722. 删除注释【2024秋招后端面试题】
3.1 分析
这道题的状态机的状态稍多题目稍复杂
3.2 代码beat 100% commits in time complexity // 假设注释内有了public ListString removeComments(String[] source) {ListStringresnew ArrayList();StringBuilder sbnew StringBuilder();// 0:初始状态1行注释2块注释3引号// 1-0, 2-0, int flag0;int nsource.length;for(int i0;in;i){String strsource[i];char cs[]str.toCharArray();int mcs.length;for(int j0;jm;){// 只能在初始状态转为行注释状态if(jm-1flag0cs[j]/cs[j1]/){String addStrsb.toString();if(!.equals(addStr)addStr!null){res.add(addStr);}sbnew StringBuilder();flag1;j2;break;}// 只能在初始状态转为多行注释状态if(jm-1flag0cs[j]/cs[j1]*){flag2;j2;continue;}// 在多行注释的状态下转换为初始状态if(jm-1flag2cs[j]*cs[j1]/){flag0;j2;continue;}// 开启引号状态if(jm-1flag0cs[j]){flag3;}// 关闭引号状态if(jm-1flag3cs[j]){flag0;}//处于引号或者初始状态的字符都可以被加入if(flag0||flag3){sb.append(cs[j]);j;continue;}j;}// 当正常状态时每一次换行都需要添加到res结果集中if(flag0){String addStrsb.toString();if(!.equals(addStr)addStr!null){res.add(addStr);}sbnew StringBuilder();}// 当换行时行注释状态自动回到初始状态if(flag1){sbnew StringBuilder();flag0;}}return res;}