【发布时间】:2019-05-13 05:33:37
【问题描述】:
我有以下问题:如果每个数字序列都是单调递增(或简单递增)的
序列中的数字大于或等于它前面的数字。编写一个布尔函数increasing(int[] x, int length),如果给定数组包含给定长度的递增子序列,则返回true,否则返回false。指导方针:
- 根本没有循环,只有递归
- 没有列表和导入(所以没有地图左右)&
? - 不改变函数
increasing(int[] x, int length)的签名 - 您可以添加私有函数,但不能添加整数/布尔值等。
我想过用一个老问题,最长递增子序列,然后比较大小,如果给定的大小比 LIS 大,它会返回 false。但是,我的 LIS 代码似乎缺少跳过数字并重复数字的情况,例如 9,7,5,4,7,1,-3,8 为 3 返回 false 而不是 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;
}
【问题讨论】:
-
你的作业要求使用递归吗?
-
是的,我只能使用递归
-
请缩进你的代码
-
你能解释一下为什么
9,7,5,4,7,1,-3,8for 3 应该返回true吗?我只看到有 2 个数字的序列4, 7。 -
@statut 因为它包含 {5,7,8}
标签: java recursion subsequence