zoukankan      html  css  js  c++  java
  • 课堂测试-求子数组和最大值

    设计思想:

    1.首先设数组中的第一个数为最大值,循环从0开始,和相邻的数相加;

    2.若得到的和大于最大值,则将和的值赋给最大值;

    3.若得到的和小于0,则将和赋为0,相当于从下一个数开始下一次循环;若最大值小于当前值,则将当前值赋给最大值,以保证全为负数时的正确。

    出现的问题:

    最后求得的最大值没有计算负数,如 5 -1 3,得到的是8

    解决方案:

    令数组第一个数为最大值,循环从0开始,即可解决问题。

    源代码:

    import java.util.Scanner;
    public class Test2 {
      public static void main(String[] args){
          int N=5;
          int list[]=new int [N];
          //创建一个新数组
          Scanner in=new Scanner(System.in);
          int i;
          System.out.println("请输入数组:");
          for(i=0;i<N;i++)
          {
              list[i]=in.nextInt();
          }
          max_ l=new max_();
          System.out.print("子数组最大的和为:  "+l.max_(list,N));
          //调用函数
          in.close();
      }
    }
    class max_
    {
        int max_(int list[],int length)
        {
            int i;
            int lmax=0;
            int max=list[0];
            //设最大值为list[0]
            for(i=0;i<length;i++)
            {
                lmax+=list[i];
                if(lmax>max||lmax==max)
                {
                    max=lmax;
                }
                if(lmax<0)//若小于0,则从后一个数开始加和
                {
                    lmax=0;
                    if(max<list[i]||max==list[i])
                    {
                        max=list[i];
                    }
                }
                //若数组全为负数,求最大值
            }
            return max;
        }
    }

    结果截图:

     

    总结:

        求子数组的和的最大值,首先要理解清楚子数组的概念;只能是相邻数之间组成。逻辑要更清楚一些,我添加了只有负数时的情况。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Java重温学习笔记,Java8新特性:函数式接口
    Java重温学习笔记,Java8新特性:Lambda 表达式
    236. 二叉树的最近公共祖先
    230. 二叉搜索树中第K小的元素
    117. 填充每个节点的下一个右侧节点指针 II
    116. 填充每个节点的下一个右侧节点指针
    111. 二叉树的最小深度
    109. 有序链表转换二叉搜索树
    剑指 Offer 68
    1367. 二叉树中的列表
  • 原文地址:https://www.cnblogs.com/yyting/p/5359462.html
Copyright © 2011-2022 走看看