zoukankan      html  css  js  c++  java
  • 子数组最大值01

    设计思想:

      1.定义两个数s,max用来更新子数组的最大值,从数组data[]的data[n-1]开始进行求和比较。

    2利用for循环,依次判断前几项之和是否小于0,若小于0则从该项继续寻找最大值,并与前几项的最大值进行比较。选出最大值。

    遇到的问题:

    开始编程思路是先进行由大到小排序,在进行前几位正数相加求最大值,但是时间复杂度为(n^2)不符合要求。

    直接进行编写思路不清晰。

    解决方案:

    在纸上进行演算,找出求子数组最大值。

    import java.util.Scanner;
    public class main{
        
          static int sum(int data[], int n)//定义数组和数组长度
          {
              int s = data[n-1];//s用来更新子数组最大值
              int max = data[n-1];//a表示最大值
              for(int i=n-2;i>=0;i--)//逆序进行
              {
                  if(s<0)//前几项的和为负数,重新计算
                  {
                      s=0;
                  }
                  s=s+data[i];
                  if(s>max)
                  {
                      max=s;//将最大值赋值给a
                  }
              } 
              return max;
          } 
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner in=new Scanner(System.in);
            System.out.println("请输入数组长度:");
            int n=in.nextInt();
            int array[]=new int[n];
            System.out.println("请输入"+n+"个整数:");
            for(int i=0;i<n;i++)
            {
                array[i]=in.nextInt();
            }
            
            int result=sum(array,n);
            System.out.print("子数组的最大值为:"+result);
        }
    
        
    
    }


    结果截图:

    总结:

    在编写该程序时应该思路清楚。 求子数组的和的最大值,首先要理解清楚子数组的概念,只能是相邻数之间组成。

  • 相关阅读:
    设计模式享元模式实现C++
    并查集
    设计模式代理模式实现C++
    设计模式装饰模式实现C++
    最小生成树Prim算法实现
    图的邻接矩阵存储
    威佐夫博弈(Wythoff Game)初识 HDU 1527 POJ 1067
    设计模式原型模式实现C++
    三种经典博弈问题 BashGame;WythoffGame;NimmGame;
    设计模式外观模式实现C++
  • 原文地址:https://www.cnblogs.com/java-test/p/5368659.html
Copyright © 2011-2022 走看看