学习方法与心得笔记
题目解析
题目描述:小M有一个独特的方式来收拾家中的盘子。每次用餐后,他会将盘子按照他们的序号顺序叠放。盘子的序号都是唯一的整数,并且在收拾前就是递增的。小M的叠放规则是,每一堆盘子的序号都是连续递增的,并且至少包含3个盘子。需要编写程序帮助小M确定盘子的叠放方式。
示例:
- 输入:
[-3, -2, -1, 2, 10, 15, 16, 18, 19, 20] - 输出:
"-3--1,2,10,15,16,18-20"
思路:
- 遍历盘子列表,检查每个盘子是否与前一个盘子连续。
- 如果连续,则继续检查下一个盘子。
- 如果不连续,则检查当前连续的盘子数量是否大于等于3。
- 如果大于等于3,则将这些盘子表示为连续的范围。
- 如果小于3,则单独列出这些盘子。
- 最后处理最后一个连续的盘子序列。
代码详解:
python
浅色版本
def solution(plates: list[int], n: int) -> str:
if n == 0:
return ""
result = []
start = plates[0]
count = 1
for i in range(1, n):
if plates[i] == plates[i-1] + 1:
count += 1
else:
if count >= 3:
result.append(f"{start}-{plates[i-1]}")
else:
result.extend(map(str, plates[i-count:i]))
start = plates[i]
count = 1
# 处理最后一段
if count >= 3:
result.append(f"{start}-{plates[-1]}")
else:
result.extend(map(str, plates[n-count:n]))
return ",".join(result)
if __name__ == "__main__":
# 测试用例
print(solution([-3, -2, -1, 2, 10, 15, 16, 18, 19, 20], 10) == "-3--1,2,10,15,16,18-20")
print(solution([-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20], 20) == "-6,-3-1,3-5,7-11,14,15,17-20")
print(solution([1, 2, 7, 8, 9, 10, 11, 19], 8) == "1,2,7-11,19")
知识总结
在使用豆包MarsCode AI刷题的过程中,我总结了以下知识点:
- 列表遍历:通过
for循环遍历列表,检查每个元素是否满足特定条件。 - 条件判断:使用
if语句进行条件判断,根据条件执行不同的代码块。 - 字符串格式化:使用
f-string进行字符串格式化,方便地将变量插入字符串中。 - 列表操作:使用
extend方法将多个元素添加到列表中,使用map函数将列表中的元素转换为字符串。
学习计划
- 制定刷题计划:每天至少刷3道题,涵盖不同的知识点和难度级别。
- 错题复习:每周复习一次错题,确保理解错误的原因并掌握正确的解法。
- 知识点总结:每刷完10道题,总结一次知识点,巩固所学内容。
- 代码优化:定期回顾之前的代码,尝试优化算法和代码结构。
工具运用
- 豆包MarsCode AI:利用AI刷题功能,自动检查代码错误,提供解题思路和优化建议。
- 在线编程平台:使用LeetCode、牛客网等在线编程平台,进行实战练习。
- 学习社区:加入编程学习社区,与他人交流学习心得和解题技巧。
通过以上学习方法和工具的结合使用,我相信能够更高效地提升编程能力,掌握更多的算法和数据结构知识。