53.Maximum Subarray | LeetCode 解题思路
来源:互联网 发布:妮维雅唇膏 知乎 编辑:程序博客网 时间:2024/05/16 10:19
题目描述
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
Difficulty : Easy
题目解读
题目要求找到相加和最大的连续子数列,一开始看这道题很像找出某函数积分值最大的连续区间。所以设置一个变量largest,时刻记录当前元素总和最大值的情况。
另一个变量sum记录所有元素总和,当总和变负时将sum清零,重新开始计算。
代码如下:
class Solution {public: int maxSubArray(vector<int>& nums) { int size = nums.size(); int largest = nums[0]; int sum = 0; for(int i = 0; i < size; i++){ sum += nums[i]; if(sum > largest) largest = sum; if(sum < 0) sum = 0; } return largest; }};
如果用到分治思想的话,考虑将数组分为左右两个部分,累加和最大的子数列可能出现在左边或者右边,或者中间部分。因此需要逐步计算出含最左元素的子列最大和,含最右元素的最大子列和,以及中间子列的最大和。最后将结果汇总。
class Solution {public: void findmax(vector<int>& nums, int l, int r, int &maxx, int &lm, int &rm, int &sum){ if(l == r) lm = rm = sum = maxx = nums[l]; else{ int mid = (l + r) / 2; int lmax, rmax, llm, lrm, rlm, rrm, lsum, rsum; findmax(nums, l, mid, lmax, llm, lrm, lsum); findmax(nums, mid + 1, r, rmax, rlm, rrm, rsum); maxx = max(max(lmax, rmax), lrm + rlm); lm = max(llm, lsum + rlm); rm = max(rrm, rsum + lrm); sum = lsum + rsum; } } int maxSubArray(vector<int>& nums) { if(nums.size() == 0) return 0; else{ int max, lm, rm, sum; findmax(nums, 0, nums.size() - 1, max, lm, rm, sum); return max; } }};
0 0
- 53.Maximum Subarray | LeetCode 解题思路
- [LeetCode] Maximum Subarray 解题思路
- [LeetCode] Maximum Product Subarray 解题思路
- Leetcode题解 53. Maximum Subarray 思路解析
- [leetcode] 53. Maximum Subarray 解题报告
- LeetCode解题报告 53. Maximum Subarray [medium]
- leetcode解题报告:53. Maximum Subarray
- [Leetcode] 53. Maximum Subarray 解题报告
- 【LeetCode】53.Maximum Subarray解题报告
- leetCode 53.Maximum Subarray (子数组的最大和) 解题思路方法
- [LeetCode] Maximum Subarray 解题报告
- 【LeetCode】Maximum Subarray 解题报告
- Leetcode #53. Maximum Subarray 最大区间和 解题报告
- Leetcode解题笔记 53. Maximum Subarray [Easy] 动态规划
- [LeetCode]53.Maximum Subarray
- LeetCode --- 53. Maximum Subarray
- [Leetcode] 53. Maximum Subarray
- [leetcode] 53.Maximum Subarray
- (二)Boyer-Moore字符串查找算法
- Java redis 中写入对象
- 394. Decode String
- 广东工业大学第12届ACM程序设计大赛 Problem A: 两只老虎
- css打字动画
- 53.Maximum Subarray | LeetCode 解题思路
- 【zjoi2011】看电影
- 广东工业大学第12届ACM程序设计大赛 Problem D: 只有通过毁灭才能揭示真理
- TCP/IP协议
- Gym
- matlab图像的Hough变换以及灰度级插值
- 442. Find All Duplicates in an Array
- Win+python3+python-docx:from exceptions import PendingDeprecationWarning
- git的入门