为什么很多人刷了几百道算法题,却还是不会做「水壶问题」?真正难住你的,从来不是代码
作者:Echo_Wish
如果你刷过 LeetCode,相信一定见过这样一道题:
给你两个容量分别为 x 升 和 y 升 的水壶,没有刻度。
可以执行下面三种操作:
- 装满任意一个水壶
- 倒空任意一个水壶
- 将一个水壶的水倒入另一个水壶,直到一方为空或另一方装满
问:是否能够得到 target 升 的水?
第一次看到这道题,大多数人的第一反应都是:
“这不是模拟吗?”
于是开始写 DFS、BFS、状态搜索……
结果写了半天,不是超时,就是状态爆炸。
后来有人告诉你:
这题其实就是最大公约数(GCD)!
很多人当场就懵了。
明明是一道模拟题,为什么最后变成了数学题?
其实,这正是算法最有意思的地方。
真正优秀的算法题,从来不是考你代码写得快,而是在考你能不能透过现象看到本质。
今天,我们就一起聊聊这道经典中的经典——Water and Jug Probl
