本题需要将 6 个单词的首字母按顺序拼接输出。核心思路是依次读取每个单词,提取其首字符,再将这些字符拼接输出。
2.读取并提取首字符:
想要实现这个功能,我们率先想到String类的charAt(int index)方法,该方法用于获取字符串中指定索引的字符(本题中使其索引为0,便可获得首字符)。
3.拼接输出字符:
想要快捷拼接字符,即想使用一种修改字符串的手段,我们可以想到使用StringBuilder类,其中的public StringBuffer append(String s),可以实现将指定的字符串追加到此字符序列。
4.返回输出字符串:
使用toString() 方法返回此对象本身(它已经是一个字符串)。最后输出完整字符串,即可解答。
(如果后续需要多次使用拼接好的字符串,可先通过 toString() 生成 String 并保存,便于操作。
此题可直接输出原字符串)
Java charAt() 方法
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
语法
public char charAt(int index)
参数
返回值
返回指定索引处的字符。
实例
以上代码输出结果为:n
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
实例:
以上实例编译运行结果如下:
Runoob..
Runoob..!
Runoob..Java!
RunooJava!
图示原理:
然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
实例:
以下是 StringBuffer 类支持的主要方法:
序号
方法描述
public StringBuffer append(String s) 将指定的字符串追加到此字符序列。
public StringBuffer reverse()
将此字符序列用其反转形式取代。
public delete(int start, int end)
移除此序列的子字符串中的字符。
public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
insert(int offset, String str)
将 str 参数的字符串插入此序列中。
replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
toString() 方法返回此对象本身(它已经是一个字符串)。
语法
public String toString()
参数
返回值
字符串本身。
实例
1.明确目标:
本题需要将输入字符串中的小写字母替换为 L,数字替换为 Q。核心思路是利用正则表达式批量匹配目标字符集,通过字符串替换方法完成转换,最终输出结果。
2.正则替换:
(由于数字和字母是互斥的字符集,替换顺序不影响最终结果)
3.输出结果:
直接打印经过两次替换后的字符串。
replaceAll() 方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。
语法
public String replaceAll(String regex, String replacement)
参数
返回值
成功则返回替换的字符串,失败则返回原始字符串。
实例
以上程序执行结果为:
正则表达式解析:
1. 组件解析
2. 整体含义
(.*)google(.*) 的意思是:
简言之,这个正则是用来匹配包含 “google” 子串的任意字符串,并将 “google” 前后的所有内容都包含在匹配范围内。
1.明确目标:
2.贪心策略:
设定让两个任务尽可能并行执行,减少等待时间。具体策略是:将三个任务的时间排序为 x ≤ y ≤ z,最小总时间为 max(z, x + y)。
3.排序处理与极值提取:
4.结果计算:
比较 max 和 min + mid 的大小,取较大值作为最小总时间。
(便于寻找有限个数字中的极值)
注意导入库
实例:
贪心算法的本质是每一步都做 “当前最有利” 的选择,通过 “局部最优” 的累积,最终得到 “全局最优” 的结果。
在 “设计师调度” 问题中,我们的目标是最小化三个任务的总完成时间。由于平台一次只能容纳两名设计师并行工作,因此需要让两个耗时较短的任务优先并行,这就是本题的 “局部最优选择”。
具体推导如下:假设三个任务的时间为 a, b, c,我们先将其排序为 x ≤ y ≤ z(x 是最小值,z 是最大值,y 是中间值)。
本题满足贪心算法的两大关键性质:
1.明确目标:
本题需要按顺序累加菜品的饱腹值,在每一步都判断当前累加和与100的接近程度,最终找到最接近 100(差距相同时选更大值)的累加和。核心思路是按顺序遍历所有可能的 “前 k 道菜累加和”,动态更新最接近 100 的结果。
2.差距比较与结果更新:
3.遍历结束与输出:
循环结束后,通过本次sum与上一步累加的result进行对比,让result永远为最大且最接近100的累加,最后输出result作为饱腹值。
在 “妈妈的菜单” 问题中,我们需要在按顺序累加菜品饱腹值的过程中,动态维护 “最接近 100(差距相同时选更大值)” 的累加和。其贪心策略可拆解为以下两点:
1. 局部最优选择:每一步都更新 “当前最接近 100 的累加和”
遍历每一道菜时,我们会计算 “前 i 道菜的总饱腹值”,并与已记录的 “最接近 100 的结果” 比较:
这一步的 “局部最优” 是:在当前遍历到的所有 “前 i 道菜的和” 中,选择最接近 100 的那个。
2. 全局最优的推导:局部最优的累积
由于题目规则是 “一旦不吃某道菜,后续菜都不上”,因此所有可能的候选解只能是 “前 1 道菜的和、前 2 道菜的和…… 前 10 道菜的和”。
我们通过逐一遍历这些候选解,并在每一步都做 “局部最优选择(更新最接近 100 的结果)”,最终这些局部最优的选择会累积成全局最优解—— 即所有候选解中最接近 100(或差距相同时更大)的那个。
3.贪心性质的验证
本题满足贪心算法的两大关键性质:
1.明确目标:
小蓝希望最终题目难度差尽可能大,小桥希望尽可能小,且两人均采取最优策略。核心思路是:
(误区:一开始简单认为读取数组后,只需分别找到各自题目难度中的极值,相减即得最终解果)
我一开始理解偏差,是因为忽视了这道题的核心是双方 “轮流删除自己的题目” 的博弈过程,不是 “直接留自己的最大 / 最小”,需要结合双方的策略动态分析:
正确的策略逻辑
我们可以从 “小蓝的视角” 推导:
2.循环遍历,动态博弈:
101 变量初始化:int maxDiff = 0
404 小蓝的最终选择:更新maxDiff
3.核心逻辑:
使用嵌套循环模拟了双方的动态博弈:
外层循环遍历小蓝的每一道题 a,内层循环遍历小桥的每一道题 b,计算并记录 a 对应的 “最小差值”(小桥的最优策略)。
小桥的局部最优:对每个 a,选 b 使得 |a - b| 最小(minDiffA);
小蓝的全局最优:在所有 minDiffA 中,选最大的那个(maxDiff)。
当今世界正经历百年未有之大变局,新一轮科技革命和产业变革加速演进,学科交叉融合不断发展,科技创新成为国际战略博弈的主要战场。“十四五”以来,我国积极加强战略骨干通道建设,打造京津冀、长三角、粤港澳大湾区、成渝双城经济圈等国际性综合交通枢纽集群,在崇山峻岭、跨江越海、滨海沿江等艰险复杂环境下建设或规划了一批重大桥梁、隧道、水利水电及城市交通枢纽工程,工程建设与运营安全需求愈发迫切,关键技术挑战日益凸
1、Calico介绍Calico不会有任何网桥!!!它会为每一个容器创建一个Veth pair 设备,一端在容器内,一端设置到宿主机上数据的转发,靠 Calico 维护的路由规则它是基于三层的二层通信三层指的是实际物理网络架构二层通信指的是,需要维护「MAC 地址级别的信息」,即「虚拟IP」与「MAC 地址」的映射关系Calico是一个纯三层的协议,为OpenStack虚机和Docker
文章目录一、时间显示二、 砝码称重三、杨辉三角形一、时间显示小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。给定一个用整数表示的时间,
第十二届蓝桥杯大赛第一场单片机组预赛程序题,包含试题及程序源码。
别是5,5,10,10,15T6-T10为程序提交共105分,分值分别是15,20,20,25,25T1-T5...
第1题 —— 求余 (5分)第2题 —— 双阶乘 (5分)第3题 —— 格点 (10分)第4题
思路设dp[i][j]dp[i][j]dp[i][j]表示到第iii个括号,当左括号比右括号多jjj个的
第十二届蓝桥杯大赛软件赛省赛 Python 大学 A 组 试题 大家好,我叫亓官劼(qí guān jié ) 时光荏苒,未来可期,加油~博主目前仅在GitHub & 中写博客,唯一博客更新的地址为:亓官劼的博客 ,近期将逐渐同步刷题相关记录到GitHub:Algorithmic-learning-records,大多是本人的刷题记录,如果转载请附上原文地址,谢谢。由
Ideas题目中给出了两种操作:当 pi = 0 时,表示将 a1, a2, · · · , aqi 降序排列;当 pi = 1 时,表示将 aqi , aqi+1, · · · , an 升序排列。按照题目暴力排序应该可以骗一点分,但如果想AC,就需要优化算法。首先对于连续的p=0,即:pi=0 qi=a;pi+1=0 qi+1=b。如果b>a,那么pi和qi的操作将无效,因为pi+1和qi+1已经将pi和qi的范围包含了。同理,如果pi+2=0; qi+2=c,而b>c,那..
Ideas其实没啥内容,就是一个最短路径问题。CodePythonimport heapqdef gcd(a, b): return a if b == 0
第七届T1 煤球数目答案T2 生日蜡烛答案T3 凑算式答案T4 分小组答案T5 抽签答案T6 方格填数答案T7 剪邮票答案T8 四平方和答案T9 取球博弈T10 压缩变换 T1 煤球数目有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), … 如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
试题 A: ASC已知大写字母 A 的 ASCII 码为 65,请问大写字母 L 的 ASCII 码是多少?答案:76试题 B: 卡片小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼
常见于 DP 优化。但这个 trick 的本质应该比 DP 优化更深刻。 DP 的转移是 DAG,如果枚举起点,从不同起点出发,求到终点的贡献;(当贡献可逆时)可以反过来求终点到起点的贡献,则省略了枚举起点的步骤。 可以理解为反求贡献系数。 特点: 贡献系数固定(DAG 边权固定)。 不同起点只有 ...
Java 团队的 AI 增量进化:无需重构技术栈,21 天解锁智能应用能力当 “用 AI 改造业务” 的需求落到 Java 团队面前,很多技术负责人都会陷入迷茫:多年深耕的 Spring Boot、微服务、分布式事务经验,在 Prompt 工程、RAG、智能体等新概念面前仿佛失效,难道要彻底颠覆现有 ...
arm;原伪指令:LDR R0, =0x12345678(非合法立即数);编译器处理步骤:;1. 在程序数据段用DCD指令定义该数值(存入内存)内存地址假设为0x20000000;2. 替换为原生LDR指令(从内存读取该数值到R0)offset = 0x20000000 - PC当前值(由链接器计算)
是什么? 美国食品药品监督管理局(FDA)制定的关于电子记录和电子签名的法规,旨在确保电子数据在监管环境下的可信度、可靠性、完整性和法律等效性,使其与纸质记录和手写签名具有同等法律效力 1. 电子记录的关键要求 审计追踪:系统必须记录所有操作和事件,确保数据变更可追溯 数据完整性:记录必须完整、准确 ...
DFS 序 DP:与合并子树的树形背包相对。 状态设计通常为 \(dp(i,S)\) 表示考虑了 dfs 序的前 \(i\) 个点,各种状态为 \(S\) 的某种属性。 优势:每次只新加入一个点。 劣势:要处理往回跳的情况(dfs 序增加 \(1\),可能是切换子树了)。 常用优化技巧:重链剖分,在 ...