2019校招真题在线编程

题目描述
输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。
输入描述:
【重要】第一行为数组的长度N(N>=1)
接下来N行,每行一个数,代表数组的N个元素
输出描述:
最大和的结果
示例1
输入
复制
8
1
-2
3
10
-4
7
2
-5
输出
复制
18
说明
最大子数组为 3, 10, -4, 7, 2

思路:
1.创建输入对象,用buffer,读取第一行,创建数组存数据。
2.循环数组并且记录当前值和记录最大值。当当前值小于0则赋予新值,否则累加。
3.比较当前值和最大值。最后返回最大值

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws IOException {
        //1.创建字符输入对象
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        //2.读取一行
        int num = Integer.parseInt(bf.readLine());
        //3.定义为8
        int[] nums = new int[num];
        //循环输入录入这些数据
        for(int i =0;i<num;i++){
            nums[i]=Integer.parseInt(bf.readLine());
        }
        if (nums==null || nums.length <=0){
            return ;
        }
        int currentSum = 0;//记录当前值
        int findMax = Integer.MIN_VALUE;//记录全场最佳值
        for (int i = 0; i < nums.length ; i++) {
            if (currentSum<=0){
                currentSum = nums[i];
            }else{
                currentSum+=nums[i];
            }
            if (currentSum>findMax){
                findMax = currentSum;
            }
        }
        System.out.println(findMax);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据学习爱好者

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值