本文主要是介绍LeetCode——剑指 Offer 42. 连续子数组的最大和(Java),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目描述
题干:
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
题解思路
返回连续子数组和最大值,直接强制命令你时间复杂度为O(n)
明显你提示你最佳答案是一次循环就可以解决,当然也不排除有更佳的办法
这里我们采用一次循环的做法,每次添加新元素后比较和新元素作比较
如果没有当前新元素大,说明前面的和为负数,所以直接保存当前元素,否则就保存和
之后每次比较当前和和以前保存的和,取出最大值即可
正确代码
public int maxSubArray(int[] nums) {
int pre = 0, ans = nums[0];
for (int num : nums) {
pre = Math.max(num, pre + num);
ans = Math.max(pre, ans);
}
return ans;
}
总结
官方给出了一个分支线段树的方法,不过确实不是我现在能参悟的
在维护和修改的方面来说确实是高,希望自己了解了线段树之后可以灵活运用到类似题目上
如果文章存在问题或则和有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见
这篇关于LeetCode——剑指 Offer 42. 连续子数组的最大和(Java)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!