子数组最大值01

本文介绍了一种求解子数组最大和的算法实现过程。通过逆序遍历数组并使用两个变量来跟踪当前子数组的和及最大和,避免了不必要的计算步骤,降低了时间复杂度。文中还提供了完整的Java代码实现。

设计思想:

  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);
    }

    

}


结果截图:

 

总结:

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

转载于:https://www.cnblogs.com/java-test/p/5368659.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值