假设我们有一个整数队列,我们需要检索该队列中的第一个唯一整数。我们必须实现一个名为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