数组中不相邻元素的最大和
来源:互联网 发布:正规淘宝运营 编辑:程序博客网 时间:2024/05/16 07:33
原题链接: Maximum sum such that no two elements are adjacent
题目
给定一个只含正数的数组,找到数组满足条件的元素的最大和,条件是:组成最大和的所有元素不能相邻,比如数组 [3,2,7,10] 返回 13(3+10),数组 [3,2,5,10,7] 返回(3+5+7)
解题思路:
遍历array 中的所有元素,设置两个变量:
excl: 不包含前一个元素的最大和
incl: 包含前一个元素的最大和
更新当前元素的 excl 和 incl:
不包含当前元素的最大和 excl = max(incl’, excl’)
包含当前元素的最大和 incl = excl’+current (元素不能相邻)
arr[] = {5, 5, 10, 40, 50, 35}1) arr[0] = 5 incl = 5 excl = 02) arr[1] = 5 incl = (excl + arr[1]) = 5 excl = max(5, 0) = 53) arr[2] = 10 incl = (excl + arr[2]) = 15 excl = max(5, 5) = 54) arr[3] = 40 incl = (excl + arr[3]) = 45 excl = max(5, 15) = 155) arr[4] = 50 incl = (excl + arr[4]) = 65 excl = max(15, 45) = 455) arr[5] = 35 incl = (excl + arr[5]) = 80 excl = max(45, 65) = 65answer is max(incl, excl) = 80
代码
#include <iostream>using namespace std;int maxSum(int *arr, int size){ if(size<=0) return 0; else if(size ==1) return arr[0]; int excl = 0, incl = arr[0]; int excl_new; for(int i = 1; i<size; ++i) { excl_new = (excl>incl)?excl:incl; incl = excl + arr[i]; excl = excl_new; } return (incl>excl)?incl:excl;}int main(){ int array[] = {5,5,10,40,50,35}; cout<<maxSum(array, 6)<<endl;}
0 0
- 数组中不相邻元素的最大和
- House Robber I - 由数组中不相邻元素组成的子数组,使其和最大
- 不相邻的最大子数组和
- 给定一个非负数组,求不相邻元素的最大和。
- 求一个数组中最大的相邻元素之和
- 元素互不相邻的最大和子数组
- [LeetCode] House Robber 求数组中元素两两不相邻的子序列最大和
- [LeetCode] House Robber II 求循环数组中元素两两不相邻的子序列最大和
- 动态规划求不相邻的最大子数组和
- 动态规划求不相邻的最大子数组和
- 动态规划求不相邻的最大子数组和
- 求不相邻的最大子数组和
- 找出数组中任何相邻子向量的最大和
- 数组最大相邻元素之和
- 找出MXN数组中所有不相邻元素,并求出它们的和(相邻的数:前一个数是偶数,后一个数是素数)
- js去除数组的重复元素和去除数组中相邻的重复元素
- Ruby实现求数组内相邻元素的最大和-《编程珠玑》问题求解
- 数组的排序,加入数组中相邻元素的置换
- 柱形图阴影线的绘制方法
- Linq 使用GroupJoin和DefaultIfEmpty实现左联接
- Appium 处理滑动
- 从Java转iOS第一个项目总结(常用第三方,工具介绍)
- redis常用命令
- 数组中不相邻元素的最大和
- scala 入门demo
- C++实现split函数
- 解决在iOS9上安装的软件显示未受信任的企业级开发者
- 吉哥系列故事——完美队形I(最长严格递增回文串 +hdu 4512)
- vs2010快捷键大全
- 自定义AlertDialog样式
- 虚拟现实大会ChinaVR2015报告之-电子试衣和三维人体建模
- Cordova与PhoneGap