A descrição da tarefa é:
Tenho uma matriz de números distintos de 1 a n, por exemplo arr = [5, 3, 4, 1, 2]
Inicialize uma variável chamada order para 1, agora percorra o arr da esquerda para a direita e procure o elemento que corresponde à variável order, se encontrado incremente order e siga em frente. Em outras palavras, podemos dizer Inicialize uma variável chamada order para 1, então primeiro percorra o array da esquerda para a direita e veja onde 1 aparece no array, então incremente order para 2, então siga em frente no array e procure por 2, se encontrado incremente order para 3. Iterar da esquerda para a direita como acima é chamado de operação
para quando arr = [5,3,4,1,2], em uma passagem da esquerda para a direita, a ordem muda seu valor de 1 para 2 quando arr[3] é encontrado e então de 2 para 3 quando arr[4] é encontrado
Repita os passos acima até que a ordem da variável atinja o valor n. O número de repetições é chamado de operações.
Então quando arr [ 5,3,4,1,2], o número mínimo de operações necessárias é 3
import java.util.*;
class Main {
public static int solve(List<Integer> arr) {
int n = arr.size();
int order = 0; // Number of sorted items found
int operations = 0; // Count of full array scan
while (sortedCount < n) {
order++;
for (int i = 0; i < n; i++) {
if (arr.get(i) == order + 1) {
order++;
}
}
}
return operations;
}
public static void main(String[] args) {
System.out.println(solve(Arrays.asList(5, 3, 4, 1, 2))); // Output: 3
System.out.println(solve(Arrays.asList(3,1,4,2,5))); // Output: 2
System.out.println(solve(Arrays.asList(1,2,3,4))); // Output: 1
System.out.println(solve(Arrays.asList(2,1))); // Output: 2
}
}
Meu código funciona em tempo O(n^2), como podemos resolver isso em menos complexidade de tempo