LeetCode学习篇二十七——Maximum Subarray
2016-12-05 14:22
260 查看
题目: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.
难度:medium
解法一:动态规划(遍历数组全局最优和局部最优)
解法二:二分法
最大和子序列不是在左边的子序列,就是右边的子序列,或者中间的子序列
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.
难度:medium
解法一:动态规划(遍历数组全局最优和局部最优)
class Solution { public: int maxSubArray(vector<int>& nums) { if(nums.size() == 0) { return 0; } int maxi = INT_MIN; int temp = 0; for(int i = 0; i < nums.size(); i++) { if(temp < 0 ) temp = 0; temp += nums[i]; maxi = max(temp, maxi); } return maxi; } };
解法二:二分法
最大和子序列不是在左边的子序列,就是右边的子序列,或者中间的子序列
class Solution { public: int maxSum(vector<int> & nums, int l, int r) { if (l == r) return nums[l]; int mid = (l + r) / 2; int maxLeft = maxSum(nums, l, mid); int maxRight = maxSum(nums, mid + 1, r); int tL = 0, tR = 0; int maxL = INT_MIN, maxR = INT_MIN; for (int i = mid; i >= l; i--) { tL += nums[i]; if (tL > maxL) maxL = tL; } for (int i = mid + 1; i <= r; i++) { tR += nums[i]; if (tR > maxR) maxR = tR; } return maxLeft > maxRight ? (maxLeft > (maxL + maxR) ? maxLeft : (maxL + maxR)) : (maxRight > (maxL + maxR) ? maxRight : (maxL + maxR)); } int maxSubArray(vector<int>& nums) { return maxSum(nums, 0, nums.size() - 1); } };
相关文章推荐
- (二十七):application对象 (JSP学习第八天)
- vi编辑器的学习使用(二十七)
- Cocos2d-x学习(二十七):Hello, CCMapView
- Cocos2d-x学习笔记(二十七)之 获得用户虚拟键盘输入
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<servlet_文件下载>(二十七)
- Python的学习(二十七)---- 遍历目录树
- 学习之路二十七:三种序列化方式的一些注意点
- 程序员的奋斗史(二十七)——谈谈英语学习
- [置顶] 程序员的奋斗史(二十七)——谈谈英语学习
- Linux实践工程师学习笔记二十七
- 网络学习(二十七)Windows XP 加入 Windows Server 2003 Active Directory
- php学习笔记(二十七)php中session的使用(基于url的)
- 我的php学习笔记(二十七)PHP模板引擎Smarty缓存应用
- WPF and Silverlight 学习笔记(二十七):基本图形的使用(2)Path和位图操作
- WPF and Silverlight 学习笔记(二十七):基本图形的使用(2)Path和位图操作
- 软件工程视频学习笔记(二十七)
- Bada学习-(二十七)三星账号Samsung Account
- Linux学习之CentOS(二十七)--Linux磁盘管理:LVM逻辑卷的拉伸及缩减
- java 从零开始,学习笔记之基础入门<servlet_文件下载>(二十七)
- Object-C 学习笔记(二十七)--- 文件操作(沙盒)