新闻详情

新闻详情

首页 / 资讯中心 / 详情

算法实战:滑动窗口、素数枚举与字符串模拟(三道经典题解)

发布时间:2026/10/2 8:26:03来源:尧图网络
算法实战:滑动窗口、素数枚举与字符串模拟(三道经典题解)
目录​编辑一、 HJ63 DNA序列滑动窗口题目描述算法思路滑动窗口Java 代码实现复杂度分析二、[编程题] 神奇数枚举与素数判断题目描述算法思路暴力枚举 判断Java 代码实现复杂度分析三、 REAL433 字符串替换字符串模拟题目描述算法思路单次遍历 尾插Java 代码实现复杂度分析一、 HJ63 DNA序列滑动窗口DNA序列_牛客题霸_牛客网题目描述给定一个 DNA 序列由 A/C/G/T 组成以及限定的子串长度 NN请找出 GC 比例最高且长度为 NN 的第一个子串。算法思路滑动窗口这道题是一道非常经典的定长滑动窗口问题。由于需要寻找长度为 NN 的连续子串我们可以维护一个长度为 NN 的窗口在字符串上从左向右滑动。使用left和right双指针right主动向右扩展。用cnt统计当前窗口内 C 和 G 的数量。当窗口大小达到 NN 时比较当前的cnt是否大于历史最大值count。由于要求“如果有多个则输出第一个”因此仅当cnt count时更新结果字符串。窗口右移将left指向的字符移出窗口若它是 C 或 G则cnt--。Java 代码实现import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in new Scanner(System.in); String s in.next(); int n in.nextInt(); int m s.length(); int left 0, right 0; int count 0, cnt 0; // count记录最大GC数cnt记录当前窗口GC数 String ret ; while (right m) { char ch s.charAt(right); if (ch C || ch G) cnt; // 窗口大小达到n if (right - left 1 n) { if (cnt count) { count cnt; ret s.substring(left, right 1); } // 左指针移除字符维护窗口大小 if (s.charAt(left) C || s.charAt(left) G) { cnt--; } left; } right; } System.out.println(ret); } }复杂度分析时间复杂度O(N)O(N)其中 NN 为字符串长度。左右指针分别最多遍历字符串一次。空间复杂度O(1)O(1)仅使用了常数个变量。二、[编程题] 神奇数枚举与素数判断神奇数_牛客笔试题_牛客网题目描述神奇数定义存在不同位置的两个数位组成一个两位数不含前导0且这个两位数是质数。例如 153可以组成 13、15、31、53 等其中 13、31、53 均为质数所以 153 是神奇数。给定区间 [a,b][a,b]1≤a≤b≤100001≤a≤b≤10000求区间内神奇数的个数。算法思路暴力枚举 判断由于题目数据范围非常小最大到 10000我们完全可以直接暴力枚举区间内每一个数并对每个数进行数位拆分和组合验证。核心逻辑拆解数位拆分将数字 xx 拆解到数组中。两两组合使用双重循环挑出两个不同位置的数位i ! j。去前导零如果十位数字num[i] 0组成的两位数会带有前导零如 05需跳过。素数判断判断num[i] * 10 num[j]是否为素数。Java 代码实现import java.util.Scanner; public class Main { // 判断素数试除法 public static boolean isPriem(int x) { if (x 2) return false; for (int i 2; i Math.sqrt(x); i) { if (x % i 0) return false; } return true; } // 检查是否为神奇数 public static int check(int x) { int[] num new int[10]; int n 0; // 拆解数位 while (x ! 0) { num[n] x % 10; x / 10; } // 枚举所有不同位置的两个数位 for (int i 0; i n; i) { for (int j 0; j n; j) { if (num[i] ! 0 i ! j) { // 不含前导0且位置不同 if (isPriem(num[i] * 10 num[j])) { return 1; } } } } return 0; } public static void main(String[] args) { Scanner in new Scanner(System.in); int a in.nextInt(), b in.nextInt(); int ret 0; for (int i a; i b; i) { ret check(i); } System.out.println(ret); } }复杂度分析时间复杂度O((b−a)×log⁡10(x)×x)O((b−a)×log10​(x)×x​)。对于最大数据范围循环次数有限绝对能在 1 秒内跑完。空间复杂度O(1)O(1)数位数组大小固定为 10。三、 REAL433 字符串替换字符串模拟字符串替换_牛客题霸_牛客网题目描述实现一个字符串替换函数。将原串中的%s按顺序替换为参数列表arg中的字符。若参数列表的字符数大于占位符数则将剩下的参数添加到字符串的末尾。保证参数个数大于等于占位符个数。算法思路单次遍历 尾插这道题是典型的模拟题考察对字符串 API 的熟悉程度和边界处理。占位符识别通过遍历原字符串遇到%字符时说明遇到了占位符题目隐含占位符为%s代码中通过i跳过了s。此时从arg数组中取出下一个字符追加到结果中。尾部追加遍历完原字符串后检查arg数组是否还有剩余字符若有则全部追加到结果字符串末尾。Java 代码实现import java.util.*; public class StringFormat { public String formatString(String A, int n, char[] arg, int m) { int count 0; StringBuffer ret new StringBuffer(); int i 0; while (i n) { if (A.charAt(i) %) { ret.append(arg[count]); i; // 跳过占位符中的 s与循环末尾的 i 结合 } else { ret.append(A.charAt(i)); } i; } // 追加剩余的参数字符 while (count arg.length) { ret.append(arg[count]); } return String.valueOf(ret); } }复杂度分析时间复杂度O(NM)O(NM)其中 NN 为原字符串长度MM 为参数数组长度。空间复杂度O(NM)O(NM)用于构建结果字符串StringBuffer。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

北斗B1I信号捕获:NH码跳变影响与二级处理方案 2026/10/2 9:14:12

北斗B1I信号捕获:NH码跳变影响与二级处理方案

前段时间调试一台自研接收机的冷启动流程,卫星列表里北斗卫星一颗颗出现,但信号状态永远停在“搜索中”。换用GPS信号源一切正常,换成北斗B1频点就抓不住。折腾了两天,最后定位到的问题不是射频前端,也不是捕获通道资源…

阅读更多 →
编译器扩展与C++兼容性:跨平台迁移的实战指南 2026/10/2 9:14:09

编译器扩展与C++兼容性:跨平台迁移的实战指南

手头最近在做一套跨平台工具链的迁移,把原本在 GCC 下编译得很爽的底层库,往 MSVC 上搬,结果光是编译错误就刷了整整三页。一开始还以为是代码写得不够规范,后来才发现,问题几乎全出在“编译器扩展”上——那些你在一种…

阅读更多 →
下载速度慢?从原理到实测:彻底搞懂迅雷限速与提速技巧 2026/10/2 9:14:07

下载速度慢?从原理到实测:彻底搞懂迅雷限速与提速技巧

不知道从什么时候开始,"下载速度"成了国内网民最敏感的神经之一。明明家里宽带已经升到千兆,结果开迅雷下个系统镜像,速度照样趴窝在几百KB/s,再一看任务列表里那个红色的"限速"提示,谁看了都上头…

阅读更多 →
SECS/GEM协议详解:半导体设备联网与主机通信的核心规范 2026/10/2 9:14:04

SECS/GEM协议详解:半导体设备联网与主机通信的核心规范

1. 先搞懂SECS/GEM到底在解决什么问题1.1 半导体工厂“设备联网”的第一道门槛做半导体设备软件这行,绕不开SECS/GEM。不管是做前道光刻机、刻蚀机,还是后道测试机、分选机,只要这台设备要进晶圆厂,要跟工厂的MES(制造…

阅读更多 →
树莓派5无显示器远程桌面:VNC无头启动保姆级教程 2026/10/2 9:14:03

树莓派5无显示器远程桌面:VNC无头启动保姆级教程

手上刚好到了一块树莓派5,标准配置,但没有显示器可接。在GitHub、论坛和树莓派交流群里翻了一圈,发现不少朋友卡在同一件事:树莓派5第一次开机,没有显示器怎么装系统、怎么连上桌面。尤其新手,连SSH是什么都…

阅读更多 →
PyTorch实战:跨年龄人脸识别模型改造与优化 2026/10/2 9:13:55

PyTorch实战:跨年龄人脸识别模型改造与优化

简介:本资源是一个基于PyTorch实现ResNet50的跨年龄人脸识别高分毕业设计项目,面向计算机、人工智能、自动化等专业学生及初/中级深度学习学习者,解决真实场景下因年龄变化导致的人脸特征偏移难题。压缩包共11个文件,含5个核心Pyt…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉