62,614
社区成员
发帖
与我相关
我的任务
分享
public static int getMaxSumOfSubArray(int[] values) {
int nStart = values[values.length - 1];
int nAll = nStart;
for (int i = values.length - 2; i >= 0; i--) {
nStart = Math.max(values[i], nStart + values[i]);
nAll = Math.max(nStart, nAll);
}
return nAll;
}
public class Test {
/**
* 获取最大的值区间方法
* @param array
* @return
* @throws Exception
*/
public Region getMaxSumPiece(int[] array) throws Exception{
int maxSum = getSum(array, 0, array.length - 1);
Region r = new Region(0, array.length - 1);
/**
* i作为起始下标, j作为结束下标
* 依次循环所有可能的结果
*/
for(int i = 0, length = array.length; i < length; i++){
for(int j = i; j < length; j++){
int total = getSum(array, i , j);
if(total > maxSum){
maxSum = total;
r.setStart(i);
r.setEnd(j);
}
}
}
return r;
}
/**
* 获取一个数组中从start开始到end(含)结束的所有元素的和
* @param array
* @param start
* @param end
* @return
* @throws Exception
*/
private int getSum(int [] array, int start, int end)throws Exception {
if(array == null || start < 0 || end > array.length || start > end){
throw new Exception("你自己写异常信息吧");
}
int sum = 0;
for(int index = start; index <= end; index++){
sum += array[index];
}
return sum;
}
/**
* 记录取值区间其实和结束的内部类
* @author Administrator
*
*/
class Region{
private int start = 0;
private int end = 0;
public Region(int start, int end){
this.start = start;
this.end = end;
}
public int getStart() {
return start;
}
public int getEnd() {
return end;
}
public void setStart(int start) {
this.start = start;
}
public void setEnd(int end) {
this.end = end;
}
}
/**
* @param args
*/
public static void main(String[] args) {
try {
Region r = new Test().getMaxSumPiece(new int[] {1,23,0,-100,5,200});
System.out.println(r.getStart() + "," + r.getEnd());
} catch (Exception e) {
e.printStackTrace();
}
}
}