1429. First Unique Number
https://leetcode.com/problems/first-unique-number
You have a queue of integers, you need to retrieve the first unique integer in the queue.
Implement the
FirstUnique
class:FirstUnique(int[] nums)
Initializes the object with the numbers in the queue.int showFirstUnique()
returns the value of the first unique integer of the queue, and returns -1 if there is no such integer.void add(int value)
insert value to the queue.
Example 1:
Input: ["FirstUnique","showFirstUnique","add","showFirstUnique","add","showFirstUnique","add","showFirstUnique"] [[[2,3,5]],[],[5],[],[2],[],[3],[]] Output: [null,2,null,2,null,3,null,-1] Explanation: FirstUnique firstUnique = new FirstUnique([2,3,5]); firstUnique.showFirstUnique(); // return 2 firstUnique.add(5); // the queue is now [2,3,5,5] firstUnique.showFirstUnique(); // return 2 firstUnique.add(2); // the queue is now [2,3,5,5,2] firstUnique.showFirstUnique(); // return 3 firstUnique.add(3); // the queue is now [2,3,5,5,2,3] firstUnique.showFirstUnique(); // return -1
Example 2:
Input: ["FirstUnique","showFirstUnique","add","add","add","add","add","showFirstUnique"] [[[7,7,7,7,7,7]],[],[7],[3],[3],[7],[17],[]] Output: [null,-1,null,null,null,null,null,17] Explanation: FirstUnique firstUnique = new FirstUnique([7,7,7,7,7,7]); firstUnique.showFirstUnique(); // return -1 firstUnique.add(7); // the queue is now [7,7,7,7,7,7,7] firstUnique.add(3); // the queue is now [7,7,7,7,7,7,7,3] firstUnique.add(3); // the queue is now [7,7,7,7,7,7,7,3,3] firstUnique.add(7); // the queue is now [7,7,7,7,7,7,7,3,3,7] firstUnique.add(17); // the queue is now [7,7,7,7,7,7,7,3,3,7,17] firstUnique.showFirstUnique(); // return 17
Example 3:
Input: ["FirstUnique","showFirstUnique","add","showFirstUnique"] [[[809]],[],[809],[]] Output: [null,809,null,-1] Explanation: FirstUnique firstUnique = new FirstUnique([809]); firstUnique.showFirstUnique(); // return 809 firstUnique.add(809); // the queue is now [809,809] firstUnique.showFirstUnique(); // return -1
Constraints:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^8
1 <= value <= 10^8
- At most
50000
calls will be made toshowFirstUnique
andadd
.
---
Space - O(N)
Time - O(N) - queue poll
Space - O(N)
Time - O(N) - queue poll
---
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class FirstUnique { | |
// Frequency of occurence of each number | |
Map<Integer, Integer> freqMap; | |
Queue<Integer> q; | |
public FirstUnique(int[] nums) { | |
q = new LinkedList<Integer>(); | |
freqMap = new HashMap<Integer, Integer>(); | |
for (int i = 0; i < nums.length; i++) { | |
add(nums[i]); | |
} | |
} | |
public int showFirstUnique() { | |
// discard numbers added later that increase freq > 1, | |
while (!q.isEmpty() && freqMap.get(q.peek()) > 1) { | |
q.poll(); | |
} | |
return q.isEmpty() ? -1 : q.peek(); | |
} | |
public void add(int value) { | |
freqMap.put(value, freqMap.getOrDefault(value, 0) + 1); | |
if (freqMap.get(value) == 1) { | |
q.offer(value); | |
} | |
} | |
} | |
/** | |
* Your FirstUnique object will be instantiated and called as such: | |
* FirstUnique obj = new FirstUnique(nums); | |
* int param_1 = obj.showFirstUnique(); | |
* obj.add(value); | |
*/ |