У меня следующая проблема: говорят, что последовательность чисел монотонно увеличивается (или просто увеличивается), если каждое число в последовательности больше или равно числу, предшествующему ей.написать булеву функцию increasing(int[] x, int length)
, которая возвращает истину, если данный массив содержит возрастающую подпоследовательность заданной длины, и ложь в противном случае.Рекомендации:
- Нет циклов вообще, только рекурсия
- Нет списков и импортов (поэтому нет карты или около того) &
?
- Без изменения подписифункции
increasing(int[] x, int length)
- Вы можете добавить частные функции, но не ints / booleans и т. д.
Я думал об использовании старой проблемы, увеличении подпоследовательности, а затем о сравнении размеровЕсли заданный размер больше, чем LIS, он вернет false.Однако в моем коде для LIS, похоже, отсутствуют случаи, когда число пропускается и повторяется, например, 9,7,5,4,7,1,-3,8
возвращает false для 3 вместо true, также для 3,1,1,2
возвращает false.
public static boolean increasing(int[] x, int length) {
int i = 0;
int ans = longestIncreasing(x, length, i);
return (ans >= length);
}
private static int longestIncreasing(int[] arr, int n, int i) {
if (n == 0) {
return 1;
}
int m = 1, temp;
if (arr[i++] < arr[n--]) {
temp = 1 + longestIncreasing(arr, n, i);
if (temp > m) {
m = temp; // m = max(m, 1 + _lis(arr, i));
}
}
else {
longestIncreasing(arr, n--, i++);
}
return m;
}