Search This Blog
HackerRank Solutions provides solutions to all problems like Algorithms, Data Structures, C, C++, Python, Java, Interview Preparation Kit in Hackerrank
Featured
- Get link
- X
- Other Apps
Java Dequeue hackerrank solution
In computer science, a double-ended queue (dequeue, often abbreviated to deque, pronounced deck) is an abstract data type that generalizes a queue, for which elements can be added to or removed from either the front (head) or back (tail).
Deque interfaces can be implemented using various types of collections such as LinkedList
or ArrayDeque
classes. For example, deque can be declared as:
Deque deque = new LinkedList<>();
or
Deque deque = new ArrayDeque<>();
You can find more details about Deque here.
In this problem, you are given N integers. You need to find the maximum number of unique integers among all the possible contiguous subarrays of size M.
Note: Time limit is 3 second for this problem.
Input Format
The first line of input contains two integers N and M : representing the total number of integers and the size of the subarray, respectively. The next line contains N space separated integers.
Constraints
1 < N < 10000
1 < M < 10000
M < N
The numbers in the array will range between [0,10000000] .
Output Format
Print the maximum number of unique integers among all possible contiguous subarrays of size M .
Sample Input
6 3
5 3 5 2 3 2
Sample Output
3
Explanation
In the sample testcase, there are 4 subarrays of contiguous numbers.
s1 = <5 , 3, 5> – Has 2 unique numbers.
s2 = < 3, 5 ,2> – Has 3 unique numbers.
s3 = <5 , 2, 3> – Has 3 unique numbers.
s4 = <2 , 3, 2> – Has 2 unique numbers.
In these subarrays, there are 2,3,3,2 unique numbers, respectively. The maximum amount of unique numbers among all possible contiguous subarrays is 3 .
Solution:-
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
final Deque<Integer> deque = new ArrayDeque<Integer>();
final Map<Integer, Integer> map = new HashMap<Integer, Integer>();
final int n = in.nextInt();
final int m = in.nextInt();
int res = 0;
for (int i = 0; i < n; i++) {
final int num = in.nextInt();
deque.addLast(num);
if (map.containsKey(num)) {
map.put(num, map.get(num).intValue() + 1);
} else {
map.put(num, 1);
}
if (deque.size() == m + 1) {
final int key = deque.removeFirst();
final int v = map.get(key);
if (v == 1) {
map.remove(key);
} else {
map.put(key, v - 1);
}
}
final int cnt = map.size();
if (cnt > res) { res = cnt; }
}
System.out.println(res);
}
}
Popular Posts
say hello world with C++ - Solution in Hacker Rank - hackerranksolutions8
- Get link
- X
- Other Apps
Comments
Post a Comment