Esse exercĂcio recebe dois inputs iniciais: um integer
N, relativo Ă quantidade de nĂșmeros em um array, e um integer
M, relativo a um subarray deslocĂĄvel que farĂĄ a "varredura" dentro do array principal.
N = quantidade de nĂșmeros do array
M = tamanho do subarray que varrerĂĄ o array principal
Dessa forma, os arrays estruturados com M = 3 serĂŁo:
[5, 3, 5]
. . . [3, 5, 2]
. . . . . [5, 2, 3]
. . . . . . . [2, 3, 2]
Como todos os subarrays precisam ter M nĂșmeros, nesse caso esses serĂŁo os subarrays possĂveis.
Depois disso, precisamos que o programa contabilize qual Ă© o mĂĄximo de nĂșmeros Ășnicos existentes em um subarray de tamanho M.
[5, 3, 5] = 2 nĂșmeros Ășnicos
[3, 5, 2] = 3 nĂșmeros Ășnicos
[5, 2, 3] = 3 nĂșmeros Ășnicos
[2, 3, 2] = 2 nĂșmeros Ășnicos
Sendo assim, o mĂĄximo de nĂșmeros Ășnicos em um subarray serĂĄ 3. Esse precisa ser o output.
Vamos para a solução, dividida em partes:
- Primeiro declaramos um Array de Integers de nome deque.
- Declaramos tambĂ©m um Hashset de Integers de nome hashset. Lembrando que um Hashset nĂŁo repete nĂșmeros, e isso vai ser Ăștil para que possamos contabilizar nĂșmeros Ășnicos.
- Depois escaneamos os ints
N
,M
emaxUniqueIntegers
(nossa resposta final) - Dentro de uma iteração, pegaremos, atravĂ©s de um input, os nĂșmeros do array. Lembrando: a quantidade de nĂșmeros do array Ă© delimitada por N, mas serĂĄ inserida pelo usuĂĄrio.
- Vamos adicionar todos os nĂșmeros do input no
Array deque
e noHashset hashset
através do.add
- Faremos uma condicional que diz que nosso Array deque, tendo o mesmo tamanho de M, farĂĄ com que o hashset receba o maxUniqueIntegers para ir contabilizando as entradas de nĂșmeros Ășnicos. Como o hashset sĂł permite nĂșmeros Ășnicos, o maxUniqueIntegers tambĂ©m sĂł receberĂĄ a quantidade de nĂșmeros Ășnicos.
- Depois, declararemos uma variĂĄvel firstQueueNumber que farĂĄ a remoção do primeiro nĂșmero do nosso array deque. A propriedade .remove sempre remove o primeiro elemento, ou o elemento que tem a menor posição i (leia mais sobre isso nas referĂȘncias)
- Por fim, imprimimos o maxUniqueNumbers, com a quantidade de nĂșmeros Ășnicos.
O cĂłdigo final fica assim:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Deque<Integer> deque = new ArrayDeque<>();
HashSet<Integer> hashset = new HashSet<>();
int n = in.nextInt();
int m = in.nextInt();
int maxUniqueIntegers = 0;
for (int i = 0; i < n; i++) {
int num = in.nextInt();
deque.add(num);
hashset.add(num);
if (deque.size() == m) {
if (hashset.size() > maxUniqueIntegers) {
maxUniqueIntegers = hashset.size();
}
int firstQueueNumber = deque.remove();
if (!deque.contains(firstQueueNumber)) {
hashset.remove(firstQueueNumber);
}
}
}
System.out.println(maxUniqueIntegers);
}
}
=======
ReferĂȘncias:
ArrayList : Oracle
============
Essa publicação faz parte de uma sĂ©rie de exercĂcios resolvidos em Java no HackerRank. Acesse a sĂ©rie completa:
- HackerRank #6 | Scanner e End-of-file
- HackerRank #7 | Int to String / String to Int
- HackerRank #8 | Date and Time
- HackerRank #9 | Static Initializer Block
- HackerRank #10 | Currency Formatter
- HackerRank #11 | DataTypes
- HackerRank #12 | Strings Introduction
- HackerRank #13 | Substring Comparisons
- HackerRank #14 | Abstract Class
- HackerRank #18 | BigInteger
- HackerRank #19 | Loops II
- HackerRank #20 | String Reverse
- HackerRank #23 | Instanceof keyword
- HackerRank #26 | Generics
- HackerRank #27 | 1D Array
- HackerRank #28 | Anagrams
- HackerRank #33 | Arraylist
- HackerRank #34 | Exception Handling Try / Catch
- HackerRank #36 | Exception Handling
- HackerRank #37 | List
- HackerRank #38 | SubArray
- HackerRank #39 | HashSet
- HackerRank #40 | Java Dequeue
Top comments (0)