Rust语言编程实例100题-058
题目:LeetCode 练习 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 中的 最大 值。
程序分析:按照要求生成即可,可以考虑使用动态规划算法。
知识点:动态规划
参考程序代码:
fn main() {
let result = get_maximum_generated(5);
dbg!(result);
}
pub fn get_maximum_generated(n: i32) -> i32 {
if n == 0 {
return 0;
}
if n == 1 {
return 1;
}
let mut dp = vec![0; (n + 1) as usize];
dp[0] = 0;
dp[1] = 1;
let mut max = dp[1];
for i in 2..=n as usize {
// 偶数
if i % 2 == 0 {
dp[i] = dp[i / 2];
} else {
dp[i] = dp[(i - 1) / 2] + dp[(i - 1) / 2 + 1];
}
max = if dp[i] > max { dp[i] } else { max };
}
// dbg!(&dp);
return max;
}
程序执行结果:
result = 3
网友评论