• 课堂练习&课下作业


    设计思路:从第一个数开始陆续相加,若遇到负数,则用之前相加数的和与该负数进行比较,若两数相加之后数值大于零,则使两数相加进行后继运算,若小于零,则从负数的后一位开始新的运算,在此过程中,用一个参数记录每次运算后的最大值。

    出现的问题:没有出现问题。在我看来缺陷就是没能同时把子数组输出。

    解决方案:在进行运算和记录最大值的同时记录数组的下标。

    源代码:

    import java.util.*;
    
    public class ArrayMax {
        public static void main(String args[])
        {
            Scanner input = new Scanner(System.in);
            System.out.print("请输入数组的长度:");
            int n = input.nextInt();
            
            int array[] = new int[n];
            System.out.print("请输入数组:");
            for(int i=0;i<n;i++)
            {
                array[i] = input.nextInt();
            }
            
            int sum = 0;
            int max = 0;
            for(int i=0;i<n;i++)
            {
                if(array[i]>=0)
                {
                    sum = sum + array[i];
                }
                else
                {
                    if(sum+array[i]>0)
                    {
                        sum = sum + array[i];
                    }
                    else
                    {
                        sum = 0;
                    }
                }
                
                if(sum>max)
                {
                    max = sum;
                }
            }
            System.out.println("所有子数组的和的最大值为:"+max);
        }
    }

    结果截图:

    这是一个特殊情况,因为输出的是储存的最大值,所以就算最后几位都是负数,用该方法也能正确输出结果。

  • 相关阅读:
    Create Your Tab and LayerTabMenu In Katana
    Linux C Programing
    Linux C Programing
    dynamics_cast<>
    TBB 学习笔记
    冒泡排序算法
    Spring4学习笔记:Spring框架中为一个bean配置依赖注入的方式
    基数排序算法的Java实现
    堆排序算法的Java实现与分析
    贪心算法
  • 原文地址:https://www.cnblogs.com/wxyxxx/p/5365717.html
Copyright © 2020-2023  润新知