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

79 阅读3分钟

在进行编程题的训练过程中,我参与了许多逻辑与算法相关的挑战。其中,一个典型的任务是统计货架上商品的数量,针对顾客的需求计算能够买到的商品数量。这个问题不仅考察了我对数据结构(如字典)和算法的理解,还让我在进行代码优化和功能扩展方面有了更深刻的领悟。

问题背景

在这个典型的商品销售问题中,我们需要了解:

  • 货架商品的组成:这是通过一个字符串来排名的,每个字符代表一种商品。
  • 顾客的需求:同样用一个字符串表示,顾客希望购买的商品种类。

我们的目标是实现一个函数,通过分析这两个字符串,返回顾客顺利购买到的商品数量。

关键代码分析

下面是我实现的 Python 代码的核心部分,用于计算顾客可以购买的商品数量:

python
def solution(n: int, m: int, s: str, c: str) -> int:  
    # 统计每个商品在货架上的出现频率  
    frequency = {}  
    for char in s:  
        if char in frequency:  
            frequency[char] += 1  
        else:  
            frequency[char] = 1  
    
    # 根据顾客想要购买的商品种类 `c` 的顺序来调整货物架上的商品顺序  
    sold = 0  
    for char in c:  
        if char in frequency and frequency[char] > 0:  
            sold += 1  
            frequency[char] -= 1  
    
    return sold  

代码解析

  1. 频率统计
    我们使用一个字典 frequency 来记录商品的种类及其对应的数量。通过简单的遍历字符串 s,我们能够轻松将每种商品的数量存入字典。

    python
    frequency = {}  
    for char in s:  
        if char in frequency:  
            frequency[char] += 1  
        else:  
            frequency[char] = 1  
    

    这段代码的核心是判断字符是否已存在于字典中,如果存在则数量加一,否则添加这个字符并初始化数量为1。

  2. 销售数量计算
    我们接下来通过遍历顾客希望购买的商品字符串 c,来统计能够成功销售的商品数量。

    python
    sold = 0  
    for char in c:  
        if char in frequency and frequency[char] > 0:  
            sold += 1  
            frequency[char] -= 1  
    

    在这段代码中,检查每一个顾客所请求的商品,如果这种商品在库存中且库存数量大于零,则该商品被成功销售,相关计数加一,并减少库存。

刷题体会

  1. 理解数据结构的使用
    在这个过程中,我深入理解了字典的使用,它在频率统计上提供了 O(1) 的平均时间复杂度,极大地提高了我们的算法效率。通过对字典操作的掌握,我意识到如何选择合适的数据结构能够使代码更加简洁且高效。
  2. 调试与测试
    在实现过程中,我积极进行单元测试,确保算法在不同边界条件下的表现。比如对空字符串的处理、重复请求商品的情况、以及没有库存的商品请求等,这些都是在实际应用中可能遇到的情况。确保程序具有鲁棒性是至关重要的。
  3. 代码优化的思考
    在多次验证后,我思考了如何进一步优化代码,例如使代码更具可读性,以及如何去掉未使用的参数,提升代码的简洁性。我逐步意识到,编写可读性的代码同样重要,因为在团队协作中,其他人需要快速理解我的思想。

总结

刷题的过程是个不断学习和自我提升的过程,我在这样的训练中不仅技能得到了锻炼,思维方式也日渐成熟。通过对一个复杂问题的持续分析与反复实现,培养了我解决问题时的系统性和严谨性。未来我会继续保持这种状态,在编程的海洋中不断探索与积累,争取在每一次的挑战中都有新的进步!