课堂练习三

返回一个整数数组中最大子数组的和

设计思路:只能遍历一周,设置一个当前最大值curMax和一个最大和Max,设置for循环进行遍历,当当前最大值大于等于0则继续累加,如果小于等于0则重置,到最后比较当前最大值和最大和,最后输出最大和。

出现的问题:最大值初始不能设置为0。

可能的解决方案:初始设置为最小整数min_value.

源代码:

package test1;

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        int[]  list =new int[100];
        int length;
        Scanner input =new Scanner(System.in);
        System.out.println("请输入数组的长度:");
        length = input.nextInt();
        if(length<=0)
        {
            System.out.println("未输入数!");
        }
        else
        {
            System.out.println("请输入数!");
            for(int i=0;i<length;i++)
            {
                list[i]=input.nextInt();
            }
        }
        input.close();
         // 记录最大的子数组和,开始时是最小的整数
        int max = Integer.MIN_VALUE;
        // 当前的和
        int curMax = list[0];
        // 数组遍历
        for (int i=0;i<length;i++) {
            // 如果当前和小于等于0,就重新设置当前和
            if (curMax <= 0) {
                curMax = list[i];
            }
            // 如果当前和大于0,累加当前和
            else {
                curMax += list[i];
            }

            // 更新记录到的最在的子数组和
            if (max < curMax) {
                max = curMax;
            }
        }
        System.out.println("最大的子数组和:"+max);

    }

}

结果截图:

总结:这个题目一开始听到确实一点头绪没有,或许是根本就没理解题目,不过在看了那么生动的演示后,大致懂了,回来试了一下,还是挺简单的,很好实现啊。

 

posted @ 2016-04-07 18:35  q白月倚寒楼  阅读(130)  评论(0编辑  收藏  举报