前言
自己的背景为生物信息学,作为一个跨行的学习者,这是第一次参加相关的训练营。体验很好,学习资源很丰富,有完整的指引指导初学者如何去一步步去做。
算法题-初学者的困境
一开始刷算法题,看到题目的描述,总是一头雾水,完全不知道代码该从何入手,这个时候能得到详细的描述和标准答案去参照着学习就大大降低的入门的难度,在掘金平台上,可以使用MarsCode AI 针对每个算法题直接生成思路提示、代码提示、检查代码就很好的辅助了我们进行学习。
叠盘子排序题解法
问题描述
小M有一个独特的方式来收拾家中的盘子。每次用餐后,他会将盘子按照他们的序号顺序叠放。盘子的序号都是唯一的整数,并且在收拾前就是递增的。小M的叠放规则是,每一堆盘子的序号都是连续递增的,并且至少包含3个盘子。需要编写程序帮助小M确定盘子的叠放方式。
例如,输入的盘子序号是 [-3, -2, -1, 2, 10, 15, 16, 18, 19, 20],按照小M的规则,连续递增序列 -3, -2, -1 可以叠在一起表示为 -3--1,而 18, 19, 20 可以叠在一起表示为 18-20。不满足连续递增至少3个的,如 2, 10, 15, 16 都应单独列出。
输入参数
plates: 一个整数数组,表示盘子的序号n: 盘子总数
测试样例
样例1:
输入:
plates = [-3, -2, -1, 2, 10, 15, 16, 18, 19, 20], n = 10
输出:"-3--1,2,10,15,16,18-20"
样例2:
输入:
plates = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20], n = 20
输出:"-6,-3-1,3-5,7-11,14,15,17-20"
样例3:
输入:
plates = [1, 2, 7, 8, 9, 10, 11, 19], n = 8
输出:"1,2,7-11,19"
解法
- (1)根据MarsCode AI的提示,第一步是初始化,要创建 空的列表
result和 当前分组的列表current_group - (2)通过遍历输入的数组,即盘子的序号,遍历的过程中将每个数字存储到
current_group中,然后将将符合题目要求的连续序列,转换为a--b的格式,存储到result中,不符合要求的数字单独存储到result中,整个过程通过for循环结合if-else判断语句来实现 - (3)最后通过jion函数将result中所有的字符串用逗号,连接 代码如下
def solution(plates: list[int], n: int) -> str:
result = []
current_group = [plates[0]]
for i in range(1, n):
if plates[i] == current_group[-1] + 1:
current_group.append(plates[i])
else:
# 处理当前分组
if len(current_group) >= 3:
result.append(f"{current_group[0]}-{current_group[-1]}")
else:
result.extend(map(str, current_group))
# 重置当前分组
current_group = [plates[i]]
# 处理最后一个分组
if len(current_group) >= 3:
result.append(f"{current_group[0]}-{current_group[-1]}")
else:
result.extend(map(str, current_group))
return ",".join(result)