53. Maximum Subarray
来源:互联网 发布:js style.color 编辑:程序博客网 时间:2024/06/06 10:45
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.
第一种方法:暴力求解,两重循环,时间复杂度O(N^2),超时了
class Solution {public: int maxSubArray(vector<int>& nums) { int i,j,sum,max; max=INT_MIN; for(i=0;i<nums.size();i++) { sum=0; for(j=i;j<nums.size();j++) { sum+=nums[j]; if(sum>max) max=sum; } } return max; }};
第二种方法:分治递归法,时间复杂度O(NlogN)
class Solution {public: int maxSubArray(vector<int>& nums) { int l=0, r=nums.size()-1; return DAC(nums,l,r); } int DAC(vector<int>& nums,int l,int r) { if(l==r) return nums[l]; int mid=(l+r)/2; int leftmax=DAC(nums,l,mid); int rightmax=DAC(nums,mid+1,r); int i; int lmax=INT_MIN; int leftsum=0; for(i=mid;i>=l;i--) { leftsum+=nums[i]; lmax=leftsum>lmax?leftsum:lmax; } int rmax=INT_MIN; int rightsum=0; for(i=mid+1;i<=r;i++) { rightsum+=nums[i]; rmax=rightsum>rmax?rightsum:rmax; } return max(max(leftmax,rightmax),lmax+rmax); } int max(int a,int b) { return a>b?a:b; }};
第三种方法:动态规划,时间复杂度O(N)
sum[i]=sum[i-1]+nums[i];
如果sum[i-1]<0 , sum[i]=nums[i];
如果sum[i-1]>0 , sum[i]=sum[i-1]+nums[i];
class Solution {public: int maxSubArray(vector<int>& nums) { int i,sum,max; max=INT_MIN; sum=0; for(i=0;i<nums.size();i++) { sum=sum+nums[i]; if(sum>max) max=sum; if(sum<0) sum=0; } return max; }};
class Solution {public: int maxSubArray(vector<int>& nums) { int i,sum,max; max=nums[0]; sum=0; for(i=0;i<nums.size();i++) { if(sum>=0) sum=sum+nums[i]; else sum=nums[i]; if(sum>max) max=sum; } return max; }};
0 0
- [LeetCode]53.Maximum Subarray
- LeetCode --- 53. Maximum Subarray
- 53.Maximum Subarray
- [Leetcode] 53. Maximum Subarray
- [leetcode] 53.Maximum Subarray
- 53.Maximum Subarray
- 53. Maximum Subarray
- 【leetcode】53. Maximum Subarray
- [leetcode] 53.Maximum Subarray
- 【leetcode】53. Maximum Subarray
- 53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- 53. Maximum Subarray LeetCode
- 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- 53. Maximum Subarray
- storm批处理事物原理
- Unity的UGUI中使用ETC1+Alpha的格式
- oslo.config组件初探
- 简易计算器之ButterKnife应用
- Hadoop学习笔记—20.网站日志分析项目案例
- 53. Maximum Subarray
- ubuntu如何调整桌面图标位置
- 后台往前台传值,出现中文乱码问题。
- Navicat11全系列激活(注册机)
- 第十一节上篇:eclipse配置(个人总结)
- top 命令使用详解
- 单链表的建立(头部延长、尾部延长)、插入操作、删除操作(无头结点的删除、有头结点的删除)
- python 爬虫 CSDN博客下载-改进版
- Hermes与开源的Solr、ElasticSearch的不同