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