本题出自力扣题库第1646题。题面大意如下:
给定一个整数 n 。按下述规则生成一个长度为 n + 1 的数组 nums : nums[0] = 0 nums[1] = 1 当 2 <= 2 * i <= n 时,nums[2 * i] = nums[i] 当 2 <= 2 * i + 1 <= n 时,nums[2 * i + 1] = nums[i] + nums[i + 1] 返回生成数组 nums 中的 最大 值。
示例 :
输入:n = 7
输出:3
解释:生成的数组nums = [0,1,1,2,1,3,2,3],最大值是 3
解题思路:
本题没有特别的难点,直接使用给定的规则生成整个数组,并逐一比较以获得最大值即可。
Java代码如下:
class Solution {
public int getMaximumGenerated(int n) {
if (n <= 1) {
return n;
}
int nums[] = new int[n + 1];
nums[0] = 0;
nums[1] = 1;
int result = 1;
for (int i = 2; i <= n; i ++) {
if (i % 2 == 0) {
nums[i] = nums[i / 2];
} else {
nums[i] = nums[ (i - 1) / 2] + nums[(i - 1)/2 + 1];
}
result = Math.max(nums[i], result);
}
return result;
}
}
以上代码可以进一步优化以减少所需的数组大小。