C ++中的第一个唯一数字

假设我们有一个整数队列,我们需要检索该队列中的第一个唯一整数。我们必须实现一个名为FirstUnique的类:它将通过队列中的数字进行初始化。定义一个函数showFirstUnique(),它将返回队列的第一个唯一整数的值,如果没有该整数,则返回-1。另一个方法是add(value),它将值插入队列。

所以,如果输入像

  • 用[2,3,4]初始化,然后调用以下函数-

  • showFirstUnique()

  • 加(5)

  • showFirstUnique()

  • 加(2)

  • showFirstUnique()

  • 加(3)

  • showFirstUnique(),

那么输出将分别为2、2、3,-1。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个队列q

  • 定义一个映射

  • 初始化程序将使用数组

    • 如果cnt [i]与1相同,则-

    • 将我插入q

    • (将cnt [i]增加1)

    • 对于数字中的每个元素

    • 对于数字中的每个元素

    • 定义功能 showFirstUnique()

    • 虽然(不是q为空并且cnt [q的第一个元素]> 1),请执行以下操作-

      • 从q删除元素

    • 返回(如果q为空,则返回-1,否则为q的第一个元素)

    • 定义一个函数add(),它将取值,

    • (将cnt [value]增加1)

    • 如果cnt [value]与1相同,则-

      • 将值插入q

    例 

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    class FirstUnique {
    public:
       queue <int> q;
       map <int, int> cnt;
       FirstUnique(vector<int>& nums) {
          for (int i : nums) {
             cnt[i]++;
          }
          for (int i : nums) {
             if (cnt[i] == 1) {
                q.push(i);
             }
          }
       }
       int showFirstUnique() {
          while (!q.empty() && cnt[q.front()] > 1) q.pop();
             return q.empty() ? -1 : q.front();
       }
       void add(int value) {
          cnt[value]++;
          if (cnt[value] == 1)
             q.push(value);
       }
    };
    main(){
       vector<int> v = {2,3,5};
       FirstUnique ob(v);
       cout << (ob.showFirstUnique()) << endl;
       ob.add(5);
       cout << (ob.showFirstUnique()) << endl;
       ob.add(2);
       cout << (ob.showFirstUnique()) << endl;
       ob.add(3);
       cout << (ob.showFirstUnique()) << endl;
    }

    输入值

    {2,3,5}
    ob.showFirstUnique();
    ob.add(5);
    ob.showFirstUnique();
    ob.add(2);
    ob.showFirstUnique();
    ob.add(3);
    ob.showFirstUnique();

    输出结果

    2
    2
    3
    -1