[] 300. Mayor aumento de Subsequence LeetCode eleve secuencia más larga (Medium) (JAVA)
Tema Dirección: https://leetcode.com/problems/longest-increasing-subsequence/
Descripción Asunto:
Dado un vector de enteros sin ordenar, encontrar la longitud de la más larga subsecuencia creciente.
Ejemplo:
Input: [10,9,2,5,3,7,101,18]
Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
Nota:
1. There may be more than one LIS combination, it is only necessary for you to return the length.
2. Your algorithm should run in O(n2) complexity.
Seguimiento: ¿Podría mejorarlo a O (n log n) complejidad del tiempo?
Sujeto al efecto
Un trastorno de una matriz de enteros dada, la longitud de la secuencia más larga creciente encontrado.
Enfoque de resolución de problemas
1, para mantener una lista de la cola ordenada
2, en sustitución de las posiciones correspondientes en la cola ordenada con un nuevo elemento, si el elemento es más grande que la anterior, se añade a la cola ordenada
class Solution {
public int lengthOfLIS(int[] nums) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
insert(list, nums[i]);
}
return list.size();
}
public void insert(List<Integer> list, int num) {
if (list.size() == 0 || list.get(list.size() - 1) < num) {
list.add(num);
return;
}
int start = 0;
int end = list.size() - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (list.get(mid) == num) {
start = mid;
break;
} else if (list.get(mid) > num) {
end = mid - 1;
} else {
start = mid + 1;
}
}
list.set(start, num);
}
}
Cuando la ejecución: 1 ms, venció el 94,83% de todos los usuarios a presentar en Java
consumo de memoria: 37,7 MB, batir el 5,05% de todos los usuarios a presentar en Java