青训营X豆包MarsCode 技术训练营 学习方法与心得

56 阅读3分钟

一、题目解析

【题目】 小F有一个整数数组 arr,他想知道是否可以将这个数组划分为三个和相等的非空部分。具体来说,需要找出两个索引 i 和 j,使得 i + 1 < j 且满足: arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1] 如果可以找到这样的索引,那么返回 true,否则返回 false

【思路解析】 要判断数组能否被分成3个和相等的部分,首先得先判断数组总和能否被3整除,若不能整除则直接返回false;由于每部分和相等又分为了三个和,所以每部分和应当是数组总和/3。

【代码思路】 每个部分的数组目标总和为target_sum,也就是total_sum/3;从左到右遍历,累计部分和current_sum;如果current_sum等于target_sum,那么就把count加一;数组遍历完了如果count等于3那么返回true,否则返回false。

【代码】

`def solution(arr: list[int]) -> bool:
total_sum = sum(arr)

if total_sum % 3 != 0:
    return False

target_sum = total_sum // 3
current_sum = 0
count = 0

for num in arr:
    current_sum += num
    
    if current_sum == target_sum:
        count += 1
        current_sum = 0  
return count >= 3

def main():
arr = list(map(int, input().split()))

result = solution(arr)
print(result)

if __name__ == "__main__":
    main() `
    

image.png

二、知识总结

通过该题学习了以下知识点:

  1. 数组划分与累积和:这题考察了使用累积和进行数组划分的技巧,通过累积计算和计数器实现条件匹配。
  2. 提前终止条件:在满足条件时提前终止,能够减少不必要的循环,提高代码的执行效率。

学习建议: 打牢数据结构基础,以及学习算法优化方法。对于算法问题,先从简单的累积和问题入手,例如求连续子数组的目标和问题等,然后逐步提高难度。


三、学习计划

  1. 可以先从简单题目入手,通过 MarsCode 的题库设置的“简单”、“中等”、“困难”的顺序刷题。如果一段时间内某个难度等级的题目能连续做对,那么就提高难度等级。
  2. 对于未解决的或有错误的题目,记录下来并分类整理,定期回顾。借助 MarsCode 的AI提出问题,理清思路,巩固知识点。
  3. 每刷一星期题目后,复盘所有题目,找出重复出错的知识点。这样可以帮助找出薄弱点,从而进行针对性练习。

四、工具运用

  1. 多平台刷题:可以在使用MarsCode刷题的同时结合其他刷题平台如 LeetCode、牛客等等,选择同类型题目进行专项训练,进一步巩固知识。
  2. 代码调试工具:使用 Python 的调试工具(如pdb)在终端中逐步调试,可以更清晰地理解代码执行流程。
  3. 利用AI讲解题解:在遇到不理解的题目时,利用 MarsCode AI 讲解题解和思路。