From 5d8a5c9dc956cc6ebf55017b3d750b4dddbe7eb5 Mon Sep 17 00:00:00 2001
From: Piotr Dec <piotr_dec@msn.com>
Date: Thu, 14 Mar 2024 18:16:17 +0100
Subject: [PATCH] Work dump

---
 .../datastructures/dequeue/Solution.java      | 65 +++++++++++++++++++
 .../datastructures/dequeue/SolutionTest.java  | 28 ++++++++
 2 files changed, 93 insertions(+)
 create mode 100644 src/main/java/eu/ztsh/training/hackerrank/datastructures/dequeue/Solution.java
 create mode 100644 src/test/java/eu/ztsh/training/hackerrank/datastructures/dequeue/SolutionTest.java

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<Integer> 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<Integer, Integer> 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