#5226. 2025南海小学区赛题解
2025南海小学区赛题解
当前没有测试数据。
题目1:气温统计
分析
遍历气温数组,维护三个变量:最高气温、最低气温、第一次出现最高气温的天数。初始化时将第一个气温作为初始最高和最低,天数记为1。后续逐个比较,更新最高/最低值,若遇到更高气温则更新天数。
注意点
- 温度可能为负数,初始化需用第一个元素而非0。
- 仅在第一次遇到更高气温时更新天数,后续相同最高温不更新。
题目2:最长连续打卡
分析
遍历打卡数组,维护两个变量:current(当前连续打卡天数)和max_len(最长连续天数)。遇到1时current加1并更新max_len;遇到0时重置current为0。
注意点
- 边界情况:全1数组(需正确返回N)、N=1(返回1或0)。
- 每次更新
current后都要尝试更新max_len,避免遗漏。
题目3:机器人走路
分析
直接模拟机器人移动,维护坐标(r, c)(初始为(1,1))。遍历指令字符串:
U:若r>1则r--;D:若r<R则r++;L:忽略;R:执行两次向右,每次若c<C则c++。
注意点
- 地图尺寸
R,C可达1e9,无需创建数组,仅维护坐标即可。 R指令需分两次判断越界(如第一次到边界后第二次不动)。
题目4:网格涂黑
分析
用两个布尔数组row_visited和col_visited分别记录被涂黑的行和被涂黑的列(去重)。初始化两个数组全为false,遍历每次操作,将对应的行和列标记为true。最后统计rows(被涂黑行数)和cols(被涂黑列数),则白色格子数为:
(仅当行和列都未被涂黑时,格子为白色)
注意点
- 必须对行和列去重(多次涂同一行/列仅算一次)。
- 数据范围1e5,数组大小需开到1e5+10,注意内存分配。
题目5:最长平衡子串(暴力部分分)
分析
首先将字符串转化为数字数组:把字符 'A' 看作 1,把字符 'B' 看作 -1。此时,“平衡子串”等价于子串的数字和为 0(因为 A 和 B 数量相等时,+1 和 -1 会相互抵消)。
为了快速计算区间和,我们引入前缀和数组。设 pre_sum[i] 表示前 i 个数字的和(规定 pre_sum[0] = 0),那么区间 [j+1, i] 的和就等于 pre_sum[i] - pre_sum[j]。我们的目标是找到满足 pre_sum[i] == pre_sum[j] 的最大 i - j。
暴力解法:先计算出前缀和数组,然后用双重循环枚举所有区间(即枚举所有的 i 和 j,其中 i > j),只要发现 pre_sum[i] == pre_sum[j],就计算长度 i - j 并更新最大值。
注意点
- 时间复杂度O(n²),对于n=2000的数据可以通过,但n=2e5时会超时。
- 前缀和数组的大小要开成
n+1,注意下标从0开始。
题目6:团队战斗力最大(暴力部分分)
分析
枚举所有可能的学生对(i, j)(i < j),计算每对的战斗力,记录最大值。
注意点
- 时间复杂度O(n²),对于n=1e4的数据可以通过,但n=1e5时会超时。
- 注意i和j不能是同一个学生,且每对只计算一次(i < j)。
