ACM_44子串和

来源:互联网 发布:星星知多少 编辑:程序博客网 时间:2024/06/05 05:29

子串和

时间限制:5000 ms  内存限制:65535KB
难度:3
描述
给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n。
输入
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=
输出
对于每组测试数据输出和最大的连续子串的和。
样例输入
151 2 -1 3 -2
样例输出
5
提示
输入数据很多,推荐使用scanf进行输入
来源
经典问题
上传者
张云聪



简单的贪心算法,但是因为输入数据大 导致要考虑时间优化,要注意全负数的情况,程序中存在内存浪费,可以优化
//acm44
public class Main {

    publicstatic void main(String[] args) {
        Main sumOfSubString = new Main();
        sumOfSubString.solution();
    }

    public voidsolution() {
      in = new Scanner(System.in);
      int groups = in.nextInt();
      for (int i = 0; i < groups; i++) {
         System.out.println(getDateAndHandle());
      }
    }
    Scannerin;
    int[]date;
    private intgetDateAndHandle(){
      int size = in.nextInt();
      date = new int[size+1];
      int maxinput = Integer.MIN_VALUE;
      int input;
      for(int i = 1 ; i <= size;i++){
         input = in.nextInt();
         maxinput = Math.max(maxinput, input);
         date[i] = Math.max(date[i-1]+input,0);
      }
      if(maxinput < 0){
         return maxinput;
      }
      Arrays.sort(date);
      return date[date.length-1];
    }
}
0 0
原创粉丝点击