leetcode:53. Maximum Subarray
来源:互联网 发布:淘宝店铺修改店名 编辑:程序博客网 时间:2024/06/05 05:29
描述
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.
思路
思路一:最为简单的暴力破解法
思路二:遍历,每一次和小于0重新求和
代码
思路一:
class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.empty()) return 0; int numsSize = nums.size(); int maxSum = nums[0]; int sumBuf = 0; for(int i = 0; i < numsSize; i++){ for(int j = i; j < numsSize; j++){ sumBuf += nums[j]; maxSum = sumBuf>maxSum?sumBuf:maxSum; } sumBuf = 0; } return maxSum; }};
思路二:
class Solution {public: int maxSubArray(vector<int>& nums) { int ans=nums[0],sum=0; for(int i=0;i< nums.size();i++){ sum+=nums[i]; ans=max(sum,ans); sum=max(sum,0); } return ans; }};
结果
他山之玉
C++ O(n) solutioin
class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size(); return maxSub(nums, 0, n - 1); }private: int maxSub(vector<int>& nums, int l, int r) { if (l > r) return INT_MIN; int m = l + ((r - l) >> 1); int lm = maxSub(nums, l, m - 1); // left half int rm = maxSub(nums, m + 1, r); // right half int i, sum, ml = 0, mr = 0; // Move leftwards for (i = m - 1, sum = 0; i >= l; i--) { sum += nums[i]; ml = max(sum, ml); } // Move rightwards for (i = m + 1, sum = 0; i <= r; i++) { sum += nums[i]; mr = max(sum, mr); } return max(ml + mr + nums[m], max(lm, rm)); }};
分治法的思路
Java O(n) solution
public static int maxSubArray(int[] A) { int maxSoFar=A[0], maxEndingHere=A[0]; for (int i=1;i<A.length;++i){ maxEndingHere= Math.max(maxEndingHere+A[i],A[i]); maxSoFar=Math.max(maxSoFar, maxEndingHere); } return maxSoFar;}
python O(n) solution
def maxSubArray(self, nums): T = nums[0] maxsub = T for i in nums[1:]: T += i if i > T: T = i if T > maxsub: maxsub = T return maxsub
0 0
- [LeetCode]53.Maximum Subarray
- LeetCode --- 53. Maximum Subarray
- [Leetcode] 53. Maximum Subarray
- [leetcode] 53.Maximum Subarray
- 【leetcode】53. Maximum Subarray
- [leetcode] 53.Maximum Subarray
- 【leetcode】53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- 53. Maximum Subarray LeetCode
- [LeetCode]53. Maximum Subarray
- leetcode 53. Maximum Subarray
- [leetcode] 53. Maximum Subarray
- LeetCode *** 53. Maximum Subarray
- 【LeetCode】53. Maximum Subarray
- leetcode 53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- Leetcode:53. Maximum Subarray
- Java基础知识&Spring&Ajax面试题
- 修复macbook
- 创业互联网公司如何搭建自己的技术框架
- Outlook 邮箱备份操作手册
- 409.Longest Palindrome
- leetcode:53. Maximum Subarray
- 使用jsoup爬虫抓取页面
- App开发智能车载之SDK篇
- android.os.handler相关知识整理
- 【DOCKER】走进DOCKER,神奇的环境隔离
- android Picasso使用详解
- css阻塞,js阻塞
- bzoj1077: [SCOI2008]天平
- 团体程序设计天梯赛-练习集 L1-009. N个数求和 解题报告