多米诺骨牌 | 豆包MarsCode AI刷题

108 阅读4分钟

大家好,今天来分享一下使用豆包 MarsCode AI刷题的经验以及收获吧

  • 优点

使用了AI之后,阅读题目感觉障碍会小很多,能提供丰富的知识讲解。它还会根据做的题目提供算法知识,包括各种算法的原理、时间复杂度和空间复杂度的分析等内容,可以帮助我们学习的时候更加深入理解算法的本质。而且豆包能给出多种算法题的解题思路,从简单的暴力解法到高效的优化解法,不同思路拓宽我们的思维。另外,豆包可以提供大量的示例代码,如果我们练习的时候使用AI且看不懂的时候,示例代码会帮助我们理解代码,从浅到深。

  • 缺点

缺乏实践的交互性。豆包只是提供文字性的讲解和示例,没有像在实际编程环境中那样能够直接调试代码的功能。而且豆包不能完全替代自己动手思考,在遇到实际问题时,我们可能会过度依赖豆包的答案而缺乏自己深入思考和探索的过程,希望大家能够在学习的过程中能够结合豆包来学习而不是一味的使用它

多米诺骨牌

回归到题目

内容如下:

小S玩起了多米诺骨牌,他排列了一行骨牌,并可能将某些骨牌向左或向右推倒。随着骨牌连锁反应的进行,一些骨牌可能因为左右两侧受力平衡而保持竖立。现在小S想要知道在所有动作完成后,哪些骨牌保持竖立。

给定一个表示骨牌初始状态的字符串,其中:

  • "L" 表示该位置的骨牌将向左倒。
  • "R" 表示该位置的骨牌将向右倒。
  • "." 表示该位置的骨牌初始时保持竖立。

模拟整个骨牌倒下的过程,求出最终仍然保持竖立的骨牌的数目和位置。

此处我们就省略几个测试样例

  1. 如果我们向豆包询问 “我们需要一点思路提示”

它的回答:

你有一行多米诺骨牌,每个骨牌可能有三种状态:向左倒、向右倒、保持竖立。 你需要模拟骨牌倒下的过程,并找出最终哪些骨牌仍然保持竖立。数据结构选择:我们可以使用一个列表来表示骨牌的状态,并逐步更新这个列表,直到没有骨牌可以倒下为止。

我觉得AI确实能够很好的帮助我们去理解题目的意图,并且AI也给出了自己的大致解题思路,帮助了我们把这个看起来就很长的题目变得了简短了许多

2.询问它具体的算法步骤

它的回答:

  1. 初始化状态:将输入的字符串转换为一个列表,方便后续更新。
  2. 模拟倒下过程:遍历列表,找到所有 R 和 L 的位置。对于每个 R,将其右侧的更新为 R 直到遇到 L 或边界;对于每个 L,将其左侧的更新为 L 直到遇到 R 或边界。
  3. 重复步骤 2,直到没有骨牌可以倒下为止。
  4. 统计结果:遍历最终的列表,统计仍然保持竖立的骨牌数量和位置。

并且给出了它的代码,虽然执行不能直接通过,但是还是能够给我使用的时候提供很多参考的地方,因为每次我做算法题的时候我总觉得自己我的思路没有办法很好的展示出来,说白了就是对代码的掌握度不够,而这个AI正好能够使我对于思路进行一个过度的作用,能够让我快速的写出来我的代码,这点是我觉得很好的地方,我的担忧也是有存在的,例如可能我之后会更加的依赖AI的使用

def pushDominoes(dominoes): charArray = list(dominoes) i = 0 while i < len(charArray): if charArray[i] == '.': left = i - 1 right = i + 1 while right < len(charArray) and charArray[right] == '.': right += 1 i = right leftChar = 'L' if left == -1 else charArray[left] rightChar = 'R' if right == len(charArray) else charArray[right] left += 1 right -= 1 if leftChar == 'R' and rightChar == 'L': while left < right: charArray[left] = 'R' charArray[right] = 'L' left += 1 right -= 1 elif leftChar == 'R' and rightChar == 'R': while left <= right: charArray[left] = 'R' left += 1 elif leftChar == 'L' and rightChar == 'L': while left <= right: charArray[left] = 'L' left += 1 i += 1 return ''.join(charArray) def solution(num, data): tmp = pushDominoes(data) res = [] index = 1 for item in tmp: if item=='.': res.append(index) index+=1 result = '0' if len(res)==0 else str(len(res))+':'+str(res).replace('[','').replace(']','').replace(' ','') print(result) return result if __name__ == "__main__": # You can add more test cases here print(solution(14, ".L.R...LR..L..") == "4:3,6,13,14" ) print(solution(5, "R....") == "0" ) print(solution(1, ".") == "1:1" )