Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
First Unique Number in C++
Suppose we have a queue of integers, we need to retrieve the first unique integer in that queue. We have to implement the class called FirstUnique: It will be initialized by the numbers in the queue. Define one function showFirstUnique(), this will return the value of the first unique integer of the queue and returns -1 if there is no such integer. Another method is add(value) this will insert value to the queue.
So, if the input is like
Initialize with [2,3,4] then call the functions as follows −
showFirstUnique()
add(5)
showFirstUnique()
add(2)
showFirstUnique()
add(3)
showFirstUnique(),
then the output will be 2, 2, 3, -1 respectively.
To solve this, we will follow these steps −
Define one queue q
Define one map cnt
-
The initializer will take the array
-
for each element i in nums
(increase cnt[i] by 1)
-
for each element i in nums
-
if cnt[i] is same as 1, then −
insert i into q
-
-
Define a function showFirstUnique()
-
while (not q is empty and cnt[first element of q] > 1), do −
delete element from q
return (if q is empty, then -1, the otherwise first element of q)
Define a function add(), this will take value,
(increase cnt[value] by 1)
-
if cnt[value] is same as 1, then −
insert value into q
Example
Let us see the following implementation to get a better understanding −
#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;
}
Input
{2,3,5}
ob.showFirstUnique();
ob.add(5);
ob.showFirstUnique();
ob.add(2);
ob.showFirstUnique();
ob.add(3);
ob.showFirstUnique();
Output
2 2 3 -1