C++中第一个唯一数字
假设我们有一个整数队列,我们需要检索该队列中的第一个唯一整数。我们必须实现一个名为FirstUnique的类:它将由队列中的数字初始化。定义一个函数showFirstUnique(),它将返回队列中第一个唯一整数的值,如果不存在这样的整数则返回-1。另一个方法是add(value),它将值插入到队列中。
所以,如果输入是这样的
用[2,3,4]初始化,然后按如下方式调用函数:
showFirstUnique()
add(5)
showFirstUnique()
add(2)
showFirstUnique()
add(3)
showFirstUnique()
那么输出将分别是2、2、3、-1。
为了解决这个问题,我们将遵循以下步骤:
定义一个队列q
定义一个映射cnt
初始化器将接收数组
对于nums中的每个元素i
(将cnt[i]增加1)
对于nums中的每个元素i
如果cnt[i]等于1,则:
将i插入到q中
定义一个函数showFirstUnique()
当(q不为空且cnt[q的第一个元素] > 1)时,执行:
从q中删除元素
返回(如果q为空,则返回-1,否则返回q的第一个元素)
定义一个函数add(),它将接收值,
(将cnt[value]增加1)
如果cnt[value]等于1,则:
将value插入到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
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP