给你一个整数 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 中的 最大 值。
这题基本上是按照题目要求:
我这里用两种解法:
法一:
public class arrMax {
public static void main(String[] args) {
int max= getMaximumGenerated(100);
System.out.println("max = " + max);
}
public static int getMaximumGenerated(int n) {
if(n==0){
return 0;
}
int[] nums = new int[n+1];
nums[0] = 0;
nums[1] = 1;
int i=1;
while(((2 * i)<=n) && ((2*i+1)<=n)){
nums[2*i] = nums[i];
nums[2 * i + 1] = nums[i] + nums[i + 1];
i++;
}
Arrays.sort(nums);
return nums[nums.length-1];
}
}
运行结果:
法二:原理大同小异
class Solution {
public int getMaximumGenerated(int n) {
if(n==0 || n==1) return n;
int nums[]=new int [n+1];
nums[0]=0;
nums[1]=1;
int max=0;
for(int i=2;i<=n;i++){
if(i%2==0){
nums[i]=nums[i/2];
}
else{
nums[i]=nums[i/2]+nums[i/2 + 1];
}
max=Math.max(max,nums[i]);
}
return max;
}
}