2.MaxSubArray-Leetcode
2016-04-12 19:46
127 查看
题目:最大连续子序列和
思路:动态规划
状态转移方程
f[j]=max{f[j-1]+s[j],s[j]}, 其中1<=j<=n
target = max{f[j]}, 其中1<=j<=n
下面给出一个类似的题:
给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用o(1)的空间复杂度。要求给出伪码。
定义f(n)为以A[n]结尾的序列最大和定义f(n)为以A
结尾的序列最大和f(n)=max(f(n−1),max(f(n−2)+A[n],A[n]) f(n)=max(f(n-1),max(f(n-2)+A
,A
)
思路:动态规划
状态转移方程
f[j]=max{f[j-1]+s[j],s[j]}, 其中1<=j<=n
target = max{f[j]}, 其中1<=j<=n
class Solution { public: int maxSubArray(vector<int>& nums) { if(nums.size()==0)return -1; if(nums.size()==1)return nums[0]; vector<int> res_vec(nums.size()); res_vec[0]=nums[0]; int max_val = nums[0]; for(vector<int>::size_type i=1;i<nums.size();++i) { res_vec[i]=max(res_vec[i-1]+nums[i],nums[i]); if(max_val<res_vec[i])max_val = res_vec[i]; } return max_val; } };
下面给出一个类似的题:
给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用o(1)的空间复杂度。要求给出伪码。
定义f(n)为以A[n]结尾的序列最大和定义f(n)为以A
结尾的序列最大和f(n)=max(f(n−1),max(f(n−2)+A[n],A[n]) f(n)=max(f(n-1),max(f(n-2)+A
,A
)
int getMax(int a[],int len) { int max1 = a[0];//表示maxSum(n-2); int max2 = a[0]>a[1]? a[0]:a[1]; //表示maxSum(n-1); int max3 = 0; // n for(int i =2; i<len; i++){ max3 = Max(a[i],Max(max1+a[i],max2)); max1 = max2; max2 = max3; } return max3; }
相关文章推荐
- 点类
- 嵌入式 GDB调试死锁示例
- ImageView的ScaleType属性
- 搜狐新闻爬虫
- YII2 日志
- Hadoop RPC机制
- VC实现当前程序退出后重启
- Nginx的介绍和使用
- 嵌入式 Linux下curl库API简单介绍
- 嵌入式 Linux下编译并使用curl静态库
- JS 扩展方法
- 【Error】IOError: [Errno 22] invalid mode
- rpm安装MySQL
- 重新编辑servlet后tomcat无需重启的方法
- c++string类的相关操作
- 【C语言】C语言中main函数问题
- c++第三次作业
- 剑指offer系列之38:判断是否是平衡二叉树
- HDU 4499 Cannon
- 持续集成:采用Xvfb+Selenium+Firefox搭建linux服务器下的自动化测试环境