acm-1003 求一个数组中连续区间和的最大值问题

来源:互联网 发布:括号匹配的检验算法 编辑:程序博客网 时间:2024/05/21 09:06

时间复杂度为n的方法:

import java.util.Scanner;class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int max = 0, sum1 = 0, first1 = 0, end1 = 0;        int ar = 0, num = 0;        for (int i = 0; i < n; i++) {            num = sc.nextInt();            for (int j = 0; j < num; j++) {                ar = sc.nextInt();                if (sum1 < 0) {                    sum1 = ar;                    first1 = j;                } else {                    sum1 += ar;                }                if (sum1 > max) {                    max = sum1;                    end1 = j;                }            }            System.out.println("Case " + (int) (i + 1) + ":");            System.out.println(max + " " + (int) (first1 + 1) + " "                    + (int) (end1 + 1));            max = 0;            sum1 = 0;            first1 = 0;            end1 = 0;        }    }}

时间复杂度为n^2的方法:

import java.util.Scanner;class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int sum = 0, sum1 = 0, first = 0, end = 0, first1 = 0, end1 = 0;        for (int i = 0; i < n; i++) {            int num = sc.nextInt();            int[] ar = new int[num];            for (int j = 0; j < num; j++) {                ar[j] = sc.nextInt();            }            for (int j = 0; j < num; j++) {                if (ar[j] >= 0) {                    for (int k = j; k < ar.length; k++) {                        sum1 += ar[k];                        if (sum1 < 0)                            break;                        if (sum1 > sum) {                            sum = sum1;                            first = j;                            end = k;                        }                    }                    sum1 = 0;                }            }            System.out.println("Case " + (int) (i + 1) + ":");            System.out.println(sum + " " + (int) (first + 1) + " "                    + (int) (end + 1));            sum = 0;            first = 0;            end = 0;        }    }}

http://my.oschina.net/u/180716/blog/86005
acm-1003

0 0
原创粉丝点击