Leetcode#53 Maximum Subarray
2015-07-20 00:48
357 查看
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
the contiguous subarray
click to show more practice.
DIfficulty:Medium
非常经典的问题
解法一,用分治法做,复杂度较高,可AC
解法二:DP作法,看了题解才理解,十分牛逼。
其中Sum表示之前的数组值之和,若这个值小于0的则说明对后面无贡献,因此清0.
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.
click to show more practice.
DIfficulty:Medium
非常经典的问题
解法一,用分治法做,复杂度较高,可AC
int gen(vector<int>& nums,int start,int en){ int temp = nums[start],sum = 0,temp1 = start; if(start==en) { return nums[start]; } if(start>en) return -2147483648; for(int i = start;i<=en;i++) { sum = sum + nums[i]; if(nums[i]<temp) { temp = nums[i]; temp1 = i; } } int ans; int leftMax = -2147483648, rightMax = -2147483648; int sum1 = 0; for (int i = temp1; i >= start; i--) { sum1 += nums[i]; if (sum1 > leftMax) leftMax = sum1; } sum1 = 0; for (int i = temp1+1; i <=en; i++) { sum1 += nums[i]; if (sum1 > rightMax) rightMax = sum1; } if (leftMax < 0 || rightMax < 0) sum1 = max(leftMax, rightMax); else sum1 = leftMax + rightMax; ans = max(gen(nums,start,temp1-1),gen(nums,temp1+1,en)); ans = max(sum,ans); ans = max(ans,sum1); return ans; } int maxSubArray(vector<int>& nums) { int len = nums.size(); int ans; ans = gen(nums,0,len-1); return ans; }
解法二:DP作法,看了题解才理解,十分牛逼。
其中Sum表示之前的数组值之和,若这个值小于0的则说明对后面无贡献,因此清0.
int maxSubArray(vector<int>& nums) { int len = nums.size(); int sum = nums[0] , maxSum = nums[0]; for(int i = 1; i < len; i++){ if(sum < 0) sum = 0; sum += nums[i]; maxSum = max(maxSum, sum); } return maxSum; }
相关文章推荐
- imx515 uboot UBIFS移植及android UBIFS文件系统烧写
- 你必须知道的指针基础-5.指针的几个小应用案例
- 大型项目开发: 隔离 (《大规模C++程序设计》书摘)
- 软件无痕清除目录
- 表单的验证
- Codeforces Round #311 (Div. 2) A,B,C,D,E
- HDU 5093 Battle ships(二分图匹配)
- 整合了刷新、加载更多、滑动删除功能的XListview
- Allegro中Thermal relief Pad 和Anti Pad
- oracle执行sql文件
- scss
- 欢迎使用CSDN-markdown编辑器
- 故障案例:mysql5.6下,mysqlbinlog版本不对可能导致的问题
- [BZOJ1303][CQOI2009]中位数图
- 黑马程序员——Java学习总结 IO部分
- 【Android界面实现】ZListView,一个最强大的刷新、加载、滑动删除的ListView控件(二)
- HDU 2299 Largest Triangle
- Swift计算属性
- C#基础:值类型、引用类型与ref关键字
- Implement Queue using Stacks