46. Самая длинная непрерывная подпоследовательность в массиве.
Название Описание
Для неупорядоченного массива arr вернуть длину самой длинной непрерывной последовательности (требуются непрерывные значения, а позиции могут быть прерывистыми, например, 3, 4, 5 и 6 - непрерывные натуральные числа)
входить
[100,4,200,1,3,2]
возвращаемое значение
4
входить
[1,1,1]
возвращаемое значение
1
анализ
1. Его можно получить из смысла вопроса, а повторяющиеся элементы не учитываются, поэтому мы применяем метод Set для автоматического удаления дубликатов.
2. Затем продолжить сравнение, если набор содержит элементы после текущего элемента + 1, дать счетчик ++;
3. Пока не пройден полный набор, чтобы можно было получить самую длинную непрерывную подпоследовательность.
Код
import java.util.*;
public class Solution {
/**
* max increasing subsequence
* @param arr int整型一维数组 the array
* @return int整型
*/
public int MLS(int[] arr) {
if (arr.length == 0) {
return 0;
}
int n = arr.length;
int max = 1;
Set<Integer> set = new HashSet<>();
for (int num : arr) {
set.add(num);
}
for (int num : arr) {
if (set.contains(num - 1)) {
continue;
}
int start = num;
while (set.contains(start + 1)) {
start++;
}
max = Math.max(max, start - num + 1);
}
return max;
}
}