面向小白的力扣53. 最大子数组和

122 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

一起来学点算法,这里是慢慢学算法,我是小coder,这是力扣的53题,一道简单题,我们来实现一下。

题目描述

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

image.png

题目分析

这个题目是让我们找到连续的子数组的最大和,我们怎么样来思考呢?什么是连续?就是一个挨着一个对吧,那好int[] nums ={-2,1,-3,4,-1,2,1,-5,4};我们很明显可以看出最大数组是4,-1,2,1值是6,因为其它的都是负数啊,对吧。

那计算机求和是两个数相加,依次加,我们要保证最大,得保证前缀最大,每次计算完之后就更新最大前缀,这样最大前缀和后面的数加和,才能得到最大。然后我们把最大数也更新一下就是答案。

解题思路

确定操作对象:本题中,操作数组就1个nums 确定操作条件:操作条件遍历所有数组,取数。 确定操作过程:操作过程为,找到最大前缀,并更新最大和。 确定结果返回:返回答案。

代码

class Solution {
      public int maxSubArray(int[] nums) {
          int pre =0;
          int ans = nums[0];
         for(int x : nums){
            pre = Math.max(x,pre+x);
            ans = Math.max(ans,pre);
         }
         return ans;
    }

}

题目总结

这里需要特别注意的一点是数组,如果有一个元素,还是负的,如果你只是把ans初始化0,那答案就是0,这是不对的,所以得以数组的第一个元素为答案,计算之后进行比较,本题是一个简单题,没什么难度,应该都能学会。