刷题漫漫路(一)| 豆包MarsCode AI刷题

39 阅读3分钟

在进行编程题目的练习时,尤其是在处理算法和数据结构相关的问题时,能够有效地分析问题并实现解决方案是至关重要的。下面是我在解决给定问题时的一些心得体会,尤其是关于如何使用 Python 语言来实现代码的思路和过程。

问题分析

这个问题的目标是生成一个包含 n 个元素的数组,这些元素是 k 的倍数,并且这些倍数在数组中不能重复。最后,我们需要返回这个数组元素的总和。

在开始编码之前,我首先明确了几个关键点:

  1. 数组的生成:我们需要从 k 开始,逐步增加 k 的倍数,直到数组中有 n 个元素。
  2. 去重:由于数组中的元素不能重复,因此在添加新元素之前需要检查该元素是否已经存在于数组中。
  3. 求和:一旦数组构建完成,我们需要计算数组元素的总和。

代码实现

在实现过程中,我选择了使用一个简单的 while 循环来逐步生成 k 的倍数。以下是关键代码的实现:

python
def solution(n: int, k: int) -> int:  
    # 初始化数组  
    array = []  
    current = k  
    
    # 逐步增加k的倍数,直到数组中有n个元素  
    while len(array) < n:  
        # 如果当前数不在数组中,添加到数组  
        if current not in array:  
            array.append(current)  
        # 增加k的倍数  
        current += k  
    
    # 计算数组元素之和  
    return sum(array)  

在这段代码中,我首先初始化了一个空数组 array 和一个变量 current,它的初始值为 k。接下来,我使用 while 循环来检查数组的长度是否小于 n。如果是,我就检查 current 是否已经存在于数组中,如果不存在,就将其添加到数组中。然后,我通过 current += k 不断生成下一个 k 的倍数。

最后,当数组的长度达到 n 时,我使用 sum(array) 来计算数组中所有元素的总和并返回。

测试用例

在 __main__ 中,我编写了一些测试用例来验证我的实现是否正确:

python
if __name__ == '__main__':  
    print(solution(n = 3, k = 1) == 6)  # 1, 2, 3 => 6  
    print(solution(n = 2, k = 2) == 6)  # 2, 4 => 6  
    print(solution(n = 4, k = 3) == 30) # 3, 6, 9, 12 => 30  

这些测试用例覆盖了不同的 n 和 k 值,确保了代码的正确性。

心得体会

  1. 逐步构建:在解决问题时,逐步构建解决方案是非常有效的。通过从简单的 k 倍数开始,我能够清晰地看到每一步的结果,并确保每个步骤都是正确的。
  2. 去重的重要性:在处理可能重复的元素时,去重是一个重要的考虑因素。在这里,我选择了直接检查数组中是否存在该元素,虽然这个方法在时间复杂度上不是最优的(因为 in 操作的时间复杂度是 O(n)),但在 n 较小的情况下,这种方法简单而有效。
  3. 代码可读性:保持代码的简洁和可读性是非常重要的。通过合理的命名和结构,我的代码易于理解和维护。
  4. 测试的重要性:编写测试用例是确保代码正确性的关键步骤。通过多种案例的验证,我能够确保我的代码在不同情况下都能正常工作。
  5. 优化思考:虽然当前的实现能够完成任务,但在处理更大的数据集时,可能需要考虑更高效的去重方法,例如使用集合(set)来存储已经添加的元素,这样可以在 O(1) 的时间复杂度内检查元素是否存在。

通过这次练习,我不仅巩固了 Python 编程的基础知识,还提高了自己的问题分析和解决能力。这些技能在未来的编程挑战中将大有裨益。