最大连续子序列和-动态规划
来源:互联网 发布:网络教育入学时间 编辑:程序博客网 时间:2024/06/04 19:41
1、题目描述(来自牛客):
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)
2、思路:
以 【第i个元素结尾的子串和的最大值 】记为 f[i],f[i] = max{f[i-1]+array[i],array[i]}。要求【第i个元素结尾的子串和 的最大值】,即看【第i个元素】和【第i个元素】+【第i-1个元素结尾的子串和 的最大值】哪一个大。
3、代码:
package leetcode;public class FindGreatestSumOfSubArray { public static void main(String[] args) { int[] array = {6,-3,-2,7,-15,1,2,2}; FindGreatestSumOfSubArray fun = new FindGreatestSumOfSubArray(); int max = fun.findGreatestSumOfSubArray(array); System.out.println(max); } public int findGreatestSumOfSubArray(int[] array) { int max_sum = origin_dp(array); return max_sum; } /** * 以 第i个元素结尾的子串和 的最大值记为 f[i],f[i] = max{f[i-1]+array[i],array[i]} * (第一个元素结尾时i为0) * @param array * @return */ private int origin_dp(int[] array) { int len = array.length; int[] f = new int[len]; f[0] = array[0]; int i; //求得 以第i个元素结尾的子串和 的最大值数组 f[i] for( i = 1; i < len; i++){ int temp1 = f[i-1] + array[i]; int temp2 = array[i]; f[i] = temp1 > temp2 ?temp1:temp2; } int max = array[0]; for(i = 0; i < len; i++){ if(max < f[i]) max = f[i]; } return max; }}
阅读全文
0 0
- [动态规划]最大连续子序列和
- 最大连续子序列和-动态规划
- 最大连续子序列和----动态规划
- 动态规划? 最大连续子序列和
- 动态规划:最大连续子序列和
- 最大连续子序列和-动态规划
- 【动态规划】最大连续序列和最大子矩阵
- HDU 1231(最大连续子序列)动态规划-最大连续子序列和
- 最大连续子序列和:递归和动态规划
- 动态规划求解最大连续子序列和
- 子序列最大连续和(动态规划、分治)
- 动态规划经典题目:最大连续子序列和
- 动态规划6_最大连续子序列和
- 动态规划法-------最大连续子序列和
- 最大连续子序列和——动态规划
- 动态规划dp经典题目:最大连续子序列和
- 动态规划回顾(1):最大连续子序列和
- 动态规划方法解决最大连续子序列和
- Constructor类概述与使用
- A Secret(HDU 6153 扩展KMP)
- 301重定向
- 【仿】新闻App练习
- 数据库的索引以及在哪些列上创建索引
- 最大连续子序列和-动态规划
- 频道管理和Tablayout
- 关于工作的一点感悟
- Lua—迭代器
- Spring AOP不拦截从对象内部调用的方法原因
- ssh里面的Write operations are not allowed in read-only mode (FlushMode.NEVER)
- 动画
- 小圆点与viewpager
- spring boot spring security学习