53. 最大子数组和
难度简单4599收藏分享切换为英文接收动态反馈
给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
1 | 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] |
示例 2:
1 | 输入:nums = [1] |
示例 3:
1 | 输入:nums = [5,4,-1,7,8] |
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
解题思路:
遍历子串或者子序列的遍历方式:
- 以某个节点为开头的所有子序列。例如数组{1,2,3}的遍历结果为:[1],[1,2],[1,2,3],[2],[2,3]
- 根据子序列的长度。比如先遍历出子序列长度为1的子序列,再遍历出自序列长度为2的子序列。
- 以某个节点为结尾的子序列,因为每个节点都可能会是子序列的结束节点,因此要遍历整个序列。例如以2为结束点的遍历结果为:[1,2],[2],以3为结束点的遍历结果为:[1,2,3],[2,3],[3]。
第一种遍历方式主要用于暴力解法。
第三种遍历方式因为可以产生递推关系,所以经常用于动态规划,这里的动态规划解法是以 先遍历出以某个节点为结束节点的所有子序列的 思路。
1 | public int maxSubArray(int[] nums) { |
- 时间复杂度:O(N),数组遍历
- 空间复杂度:O(1),f(i)