algorithm - 非相邻值的最大总和
问题描述
我在论坛上找到了几个解决这个问题的方法,但似乎没有一个对我有帮助。主要是因为我找到了一种解决方案,但不知道它是如何以及为什么起作用的。
问题说明:对于给定的正整数数组,找到不相邻元素的最大和。
该问题还严格规定解决方案必须是线性时间。这是我发现的:
int max1 = 0
int max2 = a[0];
int i;
for(i = 1; i<n; i++){
int new_max1 = max(max2, max1);
max2 = max1 + a[i];
max1 = new_max1;
}
return max(max1, max2);
任何人都可以帮助澄清这个解决方案吗?
解决方案
这是一个动态编程/递归解决方案,它基本上着眼于每个位置的 2 个场景,是否包含或排除一个值。由于数组中的所有值都是正数,因此该解决方案有效。如果数组包含负值,此解决方案将不起作用。
arr = Array of numbers
af = function(currentIndex, cummulativeSum){
if (currentIndex >= arr.length) return cummulativeSum
return Math.max(af(currentIndex+2,cummulativeSum+arr[currentIndex]), af(currentIndex+1, cummulativeSum))
}
推荐阅读
- laravel - 在 vuejs 中处理 Http Exception 错误消息的最佳方法是什么?
- odoo - 继承家庭控制器odoo 13
- html - 我的浏览器如何解释“
“? - reactjs - 带图表的正负条形图颜色
- android - 在多列中显示重复项
- spring-boot - Spring Boot JDBC 身份验证失败
- python - 匹配数据框列中的确切字符串
- java - Spring Boot JPA OneToMany 和 ManyToOne 给我带来了 JoinTable 中的所有寄存器
- javascript - 道具验证中缺少“类” - Linting
- tensorflow - 我是 ML 的新手,我正在尝试在时尚 mnist 数据集上构建一个 CNN,但我不断收到此错误