数组的子数组之和的最大值和下标的开始与结束
2014-05-28 20:17
113 查看
题目描述:给一个一维数组求其子数组之和的最大值的系列值并求出开始下标和结束下标。
思路;从数组的最后一个数字开始操作,刚开始的时候,让最大值max为最后一个数组的值,并设置一个变量maxStart也等于最后一个数组的值,然后从数组的最后开始往前操作
然后让maxStart与各个数组的值相加,当maxStart小于0时让其等于0,当maxStart大于Max时让max等于maxStart,直到遍历数组的结束。
思路;从数组的最后一个数字开始操作,刚开始的时候,让最大值max为最后一个数组的值,并设置一个变量maxStart也等于最后一个数组的值,然后从数组的最后开始往前操作
然后让maxStart与各个数组的值相加,当maxStart小于0时让其等于0,当maxStart大于Max时让max等于maxStart,直到遍历数组的结束。
package com.qetch.interview; /* * 求数组的子数组之和的最大值 * 最大值的开始和结束的下标 */ public class MaxSequeArray { static int start;//子数组的开始下标 static int end;//子数组的结束下标 public static int maxSum(int[] arr){ int max; int len=arr.length; int maxStart=arr[len-1]; max=arr[len-1]; for(int i=len-2;i>=0;i--){ if(maxStart<0){ maxStart=0; end=i; } maxStart+=arr[i]; if(maxStart>max){ start=i; max=maxStart; } } return max; } public static void main(String[] args) { int[] arr={2,5,3,-6,4,-8,6}; System.out.println(MaxSequeArray.maxSum(arr)); //end=end-1; System.out.println("start="+start+",end="+end); } }
相关文章推荐
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)
- 求一个数组相邻数的最大和,并且得到开始编号和结束编号(原创)
- 最大子序列和[记录开始和结束下标]
- [编程题]用递归求数组最大值的位置(索引,下标)
- 求数组中和最大的子数组与始末下标
- 一维静态数组_实例:寻找随机数最大值及其下标(附:源码)
- smarty中 下标不是从0开始的一维数组 用foreach读取
- 输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标。
- 求连续子数组的最大和,并记录其起始结束位置
- 程序风格---数组下标全部从1开始
- 实验 6-1输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标
- 实验 6 数组1输出最大值和它所对应的下标
- 实验6-1 输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标
- (动态规划DP)面试题:求数组中两个数的最大差值(只能下标大的减去下标小的)符合无后效性
- byte[]数组下标的最大值
- 最大子数组和(编程之美2.14,返回下标及首尾相连)
- 求子数组的最大值之和并给出子数组的下标
- 实验6 数组1(输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标。)