【LeetCode】[53] 最大子序和 (动态规划)###
2019-02-27 22:48
351 查看
动态规划
这道题难度不该是easy 这道题的一开始我想到的是暴力的滑窗去做,复杂度O(n^2),显然达不到题目中要求的复杂度 这道题根据题目关键词,“最大”“连续”,可以判断是一道动态规划。
附上这道题目的wiki链接https://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E5%AD%90%E6%95%B0%E5%88%97%E9%97%AE%E9%A2%98
方法如下:
- 定义一个函数f(n),以第n个数为结束点的子数列的最大和,存在一个递推关系f(n) = max(f(n-1) + A
, A
); - 将这些最大和保存下来后,取最大的那个就是,最大子数组和。因为最大连续子数组 等价于 最大的以n个数为结束点的子数列和
/* * @lc app=leetcode.cn id=53 lang=java * * [53] 最大子序和 * * https://leetcode-cn.com/problems/maximum-subarray/description/ * * algorithms * Easy (41.73%) * Total Accepted: 36.6K * Total Submissions: 86.5K * Testcase Example: '[-2,1,-3,4,-1,2,1,-5,4]' * * 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 * * 示例: * * 输入: [-2,1,-3,4,-1,2,1,-5,4], * 输出: 6 * 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 * * * 进阶: * * 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 * */ class Solution { public int maxSubArray(int[] nums) { int res = nums[0]; int sum = 0; for (int num : nums) { if (sum > 0) sum += num; else sum = num; res = Math.max(res, sum); } return res; } }
相关文章推荐
- LeetCode53. 最大子序和(Java)
- Leetcode 53:最大子序和(Maximum Subarray)
- Leetcode(53) 最大子序和
- LeetCode - 53. 最大子序和
- leetcode的python实现 刷题笔记53:最大子序和(多种解法)
- Leetcode53.最大子序和
- Leetcode 053 最大子序和 python 分治+动态规划
- LeetCode53最大子序和
- Leetcode 53. 最大子序和
- LeetCode题库解答与分析——#53.最大子序和MaximumSubarray
- LeetCode 最大子序和 c++ 动态规划,蛮力法
- Leetcode53.最大子序和(python3)
- LeetCode52. 最大子序和(动态规划)
- LeetCode-初级=动态规划-最大子序和
- leetcode-53 Maximum Subarray 连续子数组的最大和
- LeetCode53.python实现: 最大子序和问题☆
- leetcode 53 Maximum Subarray (求最大子数组的和)
- 53.最大子序和
- LeetCode-53:Maximum Subarray (和最大的连续子数组)
- leetcode-最大子序和(动态规划讲解)