返回
让 LeetCode 137.只出现一次的数字 II 简单一点
闲谈
2024-01-04 17:14:51
哈喽大家好,我是你们的算法解题小能手!今天我们一起来看看 LeetCode 137:只出现一次的数字 II。这道题乍一看很复杂,但其实大有玄机。让我带你用有限状态机(finite state machine)轻松解决它。
有限状态机是什么?
有限状态机是一种抽象的计算模型,可以用来表示各种各样的问题。它由有限数量的状态组成,每个状态都有自己的行为和转移条件。当输入改变时,有限状态机会从一个状态转移到另一个状态,并执行相应的行为。
如何用有限状态机解决 LeetCode 137?
第一步,我们需要定义有限状态机的状态。在这道题中,我们可以定义两个状态:
- 状态 A: 数字只出现一次
- 状态 B: 数字出现了两次
第二步,我们需要定义有限状态机的行为。对于每个状态,我们需要定义当输入改变时,有限状态机应该做什么。
- 在状态 A: 如果输入的数字只出现了一次,那么有限状态机保持在状态 A。如果输入的数字出现了两次,那么有限状态机转移到状态 B。
- 在状态 B: 如果输入的数字出现了三次,那么有限状态机回到状态 A。
第三步,我们需要定义有限状态机的转移条件。也就是,当输入改变时,有限状态机如何从一个状态转移到另一个状态。
- 从状态 A 到状态 B: 当输入的数字出现了两次
- 从状态 B 到状态 A: 当输入的数字出现了三次
有了这些定义之后,我们就可以用有限状态机来解决 LeetCode 137 了。具体步骤如下:
- 初始化有限状态机,并将当前状态设置为状态 A。
- 循环输入数字。
- 根据输入的数字,根据有限状态机的定义来更新当前状态。
- 重复步骤 2 和 3,直到输入所有数字。
- 返回当前状态。
如果当前状态是状态 A,那么只出现一次的数字就是最后一个输入的数字。如果当前状态是状态 B,那么只出现一次的数字就是倒数第二个输入的数字。
怎么样,是不是很简单?只要掌握了有限状态机的概念,LeetCode 137 就不再是难事了。
举个例子
我们来举个例子,看看如何用有限状态机解决 LeetCode 137。假设输入的数字是 [1, 2, 1, 3, 2, 5]。
- 初始化有限状态机,并将当前状态设置为状态 A。
- 循环输入数字。
- 输入第一个数字 1,有限状态机保持在状态 A。
- 输入第二个数字 2,有限状态机转移到状态 B。
- 输入第三个数字 1,有限状态机回到状态 A。
- 输入第四个数字 3,有限状态机保持在状态 A。
- 输入第五个数字 2,有限状态机转移到状态 B。
- 输入第六个数字 5,有限状态机保持在状态 A。
-
重复步骤 2 和 3,直到输入所有数字。
-
返回当前状态。
当前状态是状态 A,所以只出现一次的数字是 3。
好了,这就是用有限状态机解决 LeetCode 137 的方法。希望对你有帮助!