状态机 1748一次遍历
有限状态机四大要素
- 现态:当前所处状态
- 次态:当条件满足后,即将转移的下一个状态
- 动作:当满足某个事件时执行的动作;动作执行完毕后可以转移到另一个状态或保持原有状态
- 条件:转移状态所需的条件,当满足条件时,会触发一个动作或进行状态转移
1748. 唯一元素的和
我们可以赋给每个元素三个状态:
00:该元素尚未被访问;
11:该元素被访问过一次;
22:该元素被访问超过一次。
我们可以在首次访问一个元素时,将该元素加入答案,然后将该元素状态标记为 1。在访问到一个标记为 1的元素时,由于这意味着该元素出现不止一次,因此将其从答案中减去,并将该元素状态标记为 2。
class Solution { public: int sumOfUnique(vector<int> &nums) { int ans = 0; unordered_map<int, int> state; for (int num : nums) { if (state[num] == 0) { ans += num; state[num] = 1; } else if (state[num] == 1) { ans -= num; state[num] = 2; } } return ans; } };