LeetCode 53. Maximum Subarray--Divide and Conquer(分治法)
来源:互联网 发布:2016年实体店倒闭数据 编辑:程序博客网 时间:2024/05/21 19:37
题目链接
53. Maximum Subarray
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
.
1.首先从左到右遍历数组,并记录一个[0,x]的和,如果计算的和相比之前的和大,那么就用大的和替换之前的和,并记录当前的x值(tari),遍历结束时,所得到的tari的意义就是所求最大子数组如果是[0,tari]的子数组,其右边界一定是tari
2.从右到左遍历数组,同理得到一个tarj
3.如果tari >= tarj,易知所求子数组一定是[tarj, tari]
4.若tari < tarj,所求子数组一定在[0,tari],[tari,tarj],[tarj,size-1]中,再分别用同样的方法求得三个最大和,取其中最大值
代码:
class Solution {public: int maxSubArray(vector<int>& nums) { int i, j; int tari, tarj; int size = nums.size(); int sum = -2147483648; int temp = 0; for (i = 0; i < size; i++) { temp += nums[i]; if (temp > sum) { sum = temp; tari = i; } } temp = 0; sum = -2147483648; for (i = size-1; i >= 0; i--) { temp += nums[i]; if (temp > sum) { sum = temp; tarj = i; } } if (tari >= tarj) { int result = 0; for (j = tarj; j <= tari; j++) { result += nums[j]; } return result; } temp = 0; int tarii; sum = -2147483648; for (j = tari; j >=0; j--) { temp += nums[j]; if (temp > sum) { sum = temp; tarii = j; } } int result1 = 0; for (j = tarii; j <= tari; j++) result1 += nums[j]; temp = 0; int tarjj; sum = -2147483648; for (j = tarj; j < size; j++) { temp += nums[j]; if (temp > sum) { sum = temp; tarjj = j; } } int result2 = 0; for (j = tarj; j <= tarjj; j++) result2 += nums[j]; vector<int> nums1(nums.begin()+tari,nums.begin()+tarj); int result3 = maxSubArray(nums1); return max(max(result1, result2), result3); }};
阅读全文
0 0
- LeetCode 53. Maximum Subarray--Divide and Conquer(分治法)
- Divide and Conquer -- Leetcode problem53. Maximum Subarray
- LeetCode—Divide and Conquer--53. Maximum Subarray
- 53. Maximum SubArray(divide and conquer)
- [Leetcode刷题总结系列][Dynamic programming][Divide-and-conquer]53.Maximum Subarray
- LeetCode 169.Majority Element--Divide and Conquer(分治法)
- LeetCode 218. The Skyline Problem--Divide and Conquer(分治法)
- 分治 Divide and Conquer
- implement The Maximum Subarray using divide and conquer
- 分治法(divide-and-conquer)
- [leetcode] Divide and Conquer
- leetcode-Divide and Conquer
- LeetCode--Divide and Conquer
- 分治策略Divide and Conquer
- LeetCode 215. Kth Largest Element in an Array--Divide and Conquer(分治法)
- Introduction of Algorithm - Divide and Conquer(分治法)
- 分治法——树的遍历(Divide and Conquer
- 分治法——主定理(Divide and Conquer
- Map list set 比较
- 服务器开发---开发环境配置
- MySQL第一天初识--对数据库和表的增删改查
- 解决Selenium2Library 导入报错问题
- 数据库连接池DataSource
- LeetCode 53. Maximum Subarray--Divide and Conquer(分治法)
- Codeforces 859A Declined Finalists
- MySQL第二天--where条件查询、视图及函数
- Linux命令的组成规则及其全拼单词
- 简述MVC开发
- PinYin4jUtils
- iPhone8电池1800毫安,iPhone电量不足怎么办?
- 初始聚类中心和高斯核矩阵
- 小小异常