diff --git a/src/main/java/eu/ztsh/training/hackerrank/datastructures/dequeue/Solution.java b/src/main/java/eu/ztsh/training/hackerrank/datastructures/dequeue/Solution.java new file mode 100644 index 0000000..2dc02f8 --- /dev/null +++ b/src/main/java/eu/ztsh/training/hackerrank/datastructures/dequeue/Solution.java @@ -0,0 +1,65 @@ +package eu.ztsh.training.hackerrank.datastructures.dequeue; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Scanner; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.TreeSet; + +/** + * Java Dequeue task. + * source: https://www.hackerrank.com/challenges/java-dequeue/problem + */ +public class Solution { + + public static void main(String[] args) { + var in = new Scanner(System.in); + int n = in.nextInt(); + int m = in.nextInt(); + final Deque deque = new ArrayDeque<>(m); + var counter = new Counter(); + for (int i = 0; i < m; i++) { + var content = in.nextInt(); + deque.addLast(content); + counter.add(content); + } + int max = counter.size(); + for (int i = m; i < n; i++) { + var content = in.nextInt(); + counter.pop(deque.removeFirst()); + deque.addLast(content); + counter.add(content); + var newMax = counter.size(); + if (newMax > max) { + max = newMax; + } + } + System.out.println(max); + } + +} + +class Counter { + + public void add(int input) { + var content = map.getOrDefault(input, 0); + map.put(input, content + 1); + } + + public void pop(int input) { + var content = map.get(input); + if (content == 1) { + map.remove(input); + } else { + map.put(input, content - 1); + } + } + + public int size() { + return map.size(); + } + + private final SortedMap map = new TreeMap<>(); + +} diff --git a/src/test/java/eu/ztsh/training/hackerrank/datastructures/dequeue/SolutionTest.java b/src/test/java/eu/ztsh/training/hackerrank/datastructures/dequeue/SolutionTest.java new file mode 100644 index 0000000..5432891 --- /dev/null +++ b/src/test/java/eu/ztsh/training/hackerrank/datastructures/dequeue/SolutionTest.java @@ -0,0 +1,28 @@ +package eu.ztsh.training.hackerrank.datastructures.dequeue; + +import java.util.List; +import eu.ztsh.training.hackerrank.HackerRankTest; +import eu.ztsh.training.hackerrank.SolutionClassDescription; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +@DisplayName("HackerRank challenges: Java Subarray") +class SolutionTest extends HackerRankTest { + + @Test + public void testCase0() { + simpleAssert( + List.of( + "6 3", + "5 3 5 2 3 2" + ), + List.of("3") + ); + } + + @Override + protected SolutionClassDescription getSolutionClassDescription() { + return new SolutionClassDescription(Solution.class); + } + +} \ No newline at end of file