当前位置: 首页 > news >正文

迅雷笔试 最长相等子段数列长度 滑动窗口

👨‍🏫 牛马Code:最长相等子段数列长度
在这里插入图片描述

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;public class Main
{// 创建一个输入流读取器,用于读取控制台输入static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));public static void main(String[] args) throws Exception{// 读取一行输入并按空格分割成字符串数组String[] ss = in.readLine().split(" ");// 将字符串数组转换成整数数组int[] nums = Arrays.stream(ss).mapToInt(Integer::parseInt).toArray();// 初始化变量int max = 0; // 当前窗口中出现次数最多的数字的出现次数int l = 0; // 窗口的左边界int r = 0; // 窗口的右边界int replaceCnt = 3; // 可替换次数,即最多可以替换3次HashMap<Integer, Integer> map = new HashMap<>(); // 记录窗口内每个数字的出现次数int ans = 0; // 记录最长相等子段的长度// 开始滑动窗口while (r < ss.length){// 将当前窗口右边界数字加入map,并更新其出现次数map.put(nums[r], map.getOrDefault(nums[r], 0) + 1);// 更新当前窗口内出现次数最多的数字的最大次数max = Math.max(max, map.get(nums[r]));// 当窗口内需要替换的次数超过了允许的替换次数(replaceCnt)时,调整窗口左边界while ((r - l + 1) - max > replaceCnt){// 取出窗口左边界数字的出现次数int t = map.get(nums[l]) - 1;// 如果次数为0,移除该数字if (t == 0){map.remove(nums[l]);} else{// 否则更新该数字的次数map.put(nums[l], t);}// 左边界右移l++;}// 右边界右移r++;// 更新最长相等子段的长度if (r - l >= ans)ans = r - l;}// 输出最长相等子段的长度System.out.println(ans);}
}
http://www.lryc.cn/news/447165.html

相关文章:

  • MMD模型一键完美导入UE5-VRM4U插件方案(一)
  • bench.sh:一行命令测试Linux服务器基准测试
  • 广播IP与共享IP的关系
  • 正则表达式和re模块
  • 不同的浏览器、服务器和规范对 URL 长度的限制
  • NASA:ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006数据集
  • 数据结构之链表(1),单链表
  • 如何构建鲁棒高性能 Prompt 的方法?
  • 基于Springboot+微信小程序 的高校社团管理小程序(含源码+数据库+lw)
  • Vue 响应式监听 Watch 最佳实践
  • md编辑器语法
  • RabbitMQ常用管理命令及管理后台
  • 从准备面试八股文,感悟到技术的本质
  • 云手机的默认ip地址是什么
  • 对接阿里asr和Azure asr
  • 未来数字世界相关技术、应用:AR/VR/MR;数字人、元宇宙、全息显示
  • 在 Java 中提供接口方法而不是实现接口
  • 伪类选择器
  • 亚信安全天穹5分钟勒索体检 免费试用今起上线
  • 高校竞赛管理系统的设计与实现
  • 物联网行业中通信断线重连现象介绍以及如何实现
  • 新手上路:Anaconda虚拟环境创建和配置以使用PyTorch和DGL
  • centos7系统安装宝塔面板
  • 汽车总线之----J1939总线
  • 基于skopt的贝叶斯优化基础实例学习实践
  • OJ在线评测系统 后端 用策略模式优化判题机架构
  • element ui 精确控制日期控件 date-picker
  • centos7安装指定版本php及扩展
  • 后端-对表格数据进行添加、删除和修改
  • 【学习笔记】手写 Tomcat 七