一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
一起来学点算法,这里是慢慢学算法,我是小coder,这是力扣的53题,一道简单题,我们来实现一下。
题目描述
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
题目分析
这个题目是让我们找到连续的子数组的最大和,我们怎么样来思考呢?什么是连续?就是一个挨着一个对吧,那好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,这是不对的,所以得以数组的第一个元素为答案,计算之后进行比较,本题是一个简单题,没什么难度,应该都能学会。