一个数组子数组求最大值

一维数组问题

一、求连续的元素的子数组最大值。

首先,问题的要求是:
       输入一个整形数组,数组里有正数也有负数。
       数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
       求所有子数组的和的最大值。要求时间复杂度为O(n)。

我写的代码如下:

复制代码
复制代码
import java.util.*;

public class Array {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x, i;
        int max = 0, lsmax = 0;

        x = sc.nextInt();
        int[] a = new int[x];

        for (i = 0; i < a.length; i++) {
            a[i] = sc.nextInt();
            if (i == 0) {
                lsmax = a[i];
                max = lsmax;
            } else {
                if (lsmax < 0) {
                    lsmax = a[i];
                } else {
                    lsmax += a[i];
                }

            }
            if (lsmax > max) {
                max = lsmax;
            }
        }

        System.out.println(max);
    }
}
复制代码
复制代码

 然后我说一下我的思路,当时上课的时候虽然这个很简单,但是我还是没有想出来。

1.因为是要求所有子数组的情况,所以有都为负数的情况以及其它情况,都为负数的情况就需要单独对比,找出负数里面的最大值。连续的情况就需要一个个相加来对比。

2.因为是第一阶段,所以代码也是比较简单,思路就是创建一个动态数组,然后创建一个用来储存临时最大值的变量lsmax以及最终结果的最大值的变量max,首先判断是否只有一个变量,是的话就是直接输出最大值。然后当超过一个变量的时候就可以判断前两个数的和是否小于0,小于0的话就可以直接舍弃不要了,从当前变量从新来选。最后如果临时最大值大于最终结果,就把临时最大值赋值给最终结果,输出即可。

posted @   信2005-2李浩  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示