状态机 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;
    }
};

 

posted @ 2022-02-06 10:37  千寻slimg  阅读(36)  评论(0编辑  收藏  举报