求数组中最大和子串类问题
来源:互联网 发布:glide源码 编辑:程序博客网 时间:2024/06/06 11:04
public class maxsub {/* * 基于的性质:1.对于全负的元素,找到最大值即可 * 2.对于最大子串和大于0的,可证明最大子串中任意前缀串大于0 * * 算法:依次计算累加和,当累加和大于原累加和时记录最大值相关信息,当累加和小于零时,由下一元素重新累加 */static int getmaxsub(int[] a) throws Exception{if(null==a||a.length<=0)throw new Exception();int maxhead=0,maxend=0,max=Integer.MIN_VALUE;int head=0,sum=0;for(int i=0;i<a.length;i++){sum+=a[i];if(sum>max){max=sum;maxhead=head;maxend=i;}if(sum<0){head=i+1;sum=0;}}System.out.printf("\nmaxsub is %d to %d sum=%d\n",maxhead,maxend,max);return max;}static int getMaxsub(int[] a) throws Exception{if(null==a||a.length<=0)throw new Exception();int sum=0,max=Integer.MIN_VALUE;for(int i=0;i<a.length;i++){sum+=a[i];if(sum>max)max=sum;if(sum<0)sum=0;}return max;}static int[] getMaxsub(int[] a,int start,int end) throws Exception{if(null==a||start>=end)throw new Exception();int maxhead=0,maxend=0,max=Integer.MIN_VALUE;int head=0,sum=0;for(int i=start;i<end;i++){sum+=a[i];if(sum>max){max=sum;maxhead=head;maxend=i;}if(sum<0){head=i+1;sum=0;}}return new int[] {max,maxhead,maxend};}public static void main(String[] argvs) throws Exception{int[] a={-2, 1, -3, 4, -1, 2, 1, -5, 4};getmaxsub(a);System.out.println(getMaxsub(a));int[] b = getMaxsub(a,0,a.length);System.out.println(Math.max(getMaxsub(a, 0, b[1])[0],getMaxsub(a,b[2],a.length)[0]));}}
0 0
- 求数组中最大和子串类问题
- 求数组连续最大和问题
- 求子数组的最大和问题
- 求子数组的最大和问题
- 求子数组最大和问题
- 求最大子数组和问题
- 求数组中连续最大和
- 求数组中最大子数组和及坐标
- 求数组中连续子数组的最大和
- 算法——求数组中最大子数组和
- 求二维数组中最大子数组的和
- 求一个数组中连续子数组的最大和
- 求数组中最大连续子数组的和
- 求最大子数组/子序列/子段和问题
- 求二维数组矩形区域最大和问题
- 求连续子数组的最大和问题
- 数组中求最大数
- 数组中求最大最小值
- 关于c++顺序容器小结(二)---基本操作
- [笔记] Convex Optimization 2015.11.04
- 面试准备
- Android基础入门教程——8.3.16 Canvas API详解(Part 1)
- 通过心理学知识提高问题定位与解决能力(下)
- 求数组中最大和子串类问题
- Android 自定义 弹幕控件
- javamail 发送邮件的简单实例 学习
- androidscreenOrientation属性
- php面向对象之_get(),_set()拦截器
- 树和二叉树——利用二叉树遍历思想解决问题
- 以九宫格为例谈声明式语言Prolog
- poj 1018 Communication System 【动态规划】||【贪心】
- 使用jazzyViewPager 加载assets目录打造炫酷效果