首页 > 试题广场 >

找出数组(至少包含一个数字)中的一个连续子数组、该子数组拥有

[问答题]

找出数组(至少包含一个数字)中的一个连续子数组、该子数组拥有最大和。

例如:给定一个数组[ 2,1, 3,4, 1,2,1, 5,4],连续子数组[4, 1,2,1]的和是6,比其它子数组的和都大。

int maxSubArray(int *nums, int arrLen){

}

剑指Offer-连续子数组的最大和

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;
    }
}
发表于 2018-04-14 15:27:26 回复(0)
更多回答
是求子数组的最大和,还是最大和的子数组?
如果是子数组的最大和,就看这个:https://www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484

如果是最大和的子数组,就看这个:https://www.nowcoder.com/questionTerminal/4e682c258f37433f9bb4b754d7ac6c08

编辑于 2017-08-28 10:29:06 回复(0)
求最大字串和,字串两边肯定都是正数,遍历所有两边为正数的字串,把
和放在另一个数组中,找出最大值即可
#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);
    }
}

发表于 2017-08-28 21:28:38 回复(0)