找出数组(至少包含一个数字)中的一个连续子数组、该子数组拥有最大和。
例如:给定一个数组[ − 2,1, − 3,4, − 1,2,1, − 5,4],连续子数组[4, − 1,2,1]的和是6,比其它子数组的和都大。
int maxSubArray(int *nums, int arrLen){
}
public class Solution01 {
public static void main(String[] args) {
int[] arr = { − 2,1, − 3,4, − 1,2,1, − 5,4};
System.out.println(FindGreatestSumOfSubArray(arr));
}
public static int FindGreatestSumOfSubArray(int[] array) {
if(array.length==0)
return 0;
int sum = array[0];//保存每组的和
int maxSum = array[0];//连续子数组最大和
//动态规划
for(int i = 1;i<array.length;i++){
sum = Math.max(sum+array[i],array[i]);
maxSum = Math.max(sum,maxSum);
}
return maxSum;
}
}
求最大字串和,字串两边肯定都是正数,遍历所有两边为正数的字串,把 和放在另一个数组中,找出最大值即可 #include<stdio.h> #include<stdlib.h> int main() { int a[1000]={0}; while(scanf("%d",&a[0])!=EOF) { int i,j,k,num=1,flag=a[0],b[1000]={0}; int sum,n=0,flt; for(i=1;i<1000;i++) { scanf("%d",&a[i]); if(a[i]>flag) flag=a[i]; num++; if(getchar()=='\n') break; } for(i=0;i<num-1;i++) { if(a[i]>0) for(j=num-1;j>i;j--) { sum=0; if(a[j]>0) { for(k=i;k<=j;k++) sum+=a[k]; printf("i=%d j=%d sum=%d\n",i,j,sum); b[n++]=sum; } } } for(k=0;k<n;k++) if(b[k]>flt) flt=b[k]; if(flt>flag) printf("%d\n",flt); else printf("%d\n",flag); } }