53.Maximum Subarray
来源:互联网 发布:淘宝老顾客互换资源 编辑:程序博客网 时间:2024/06/15 21:51
- description
- 题意
- Kadane算法
- 描述
- 具体实现
- 复杂度分析
- 分治法
- 描述
- 具体实现
- 复杂度分析
description
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.
click to show more practice.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
题意
找出一个和最大的子数组.注意这里的子数组是连续的.
可以用两种方法:
1. Kadane算法:
2. 分治法:
Kadane算法
描述
Kadane算法属于动态规划
定义两个变量
每遍历一个数字
1. 比较
2. 然后再把
具体实现
class Solution {public: int maxSubArray(vector<int>& nums) { int result = INT_MIN, curSum = 0; for (int i = 0; i < nums.size(); i++) { curSum = max(curSum+nums[i], nums[i]); result = max(result, curSum); } return result; }};
复杂度分析
时间复杂度:
空间复杂度:
分治法
描述
分治法:最大子串和的区间有以下三种情况(low,high分别为左右边界,mid为(low+high)/2):
(1) 区间完全在 A[low,mid-1]
(2) 区间完全在 A[mid+1,high]
(3) 区间包含有 A[mid], 从中间开始,往左右两侧扫描
具体实现
class Solution {public: int maxSubArray(vector<int>& nums) { return divide(nums, 0, nums.size()-1); } int divide(vector<int>& nums, int low, int high){ if(low == high) return nums[low]; if(low == high-1) return max(nums[low]+nums[high], max(nums[low], nums[high])); int mid = (low+high)/2; int lmax = divide(nums, low, mid-1); // left max int rmax = divide(nums, mid+1, high); // right max int mmax = nums[mid]; // middle max int tmp = mmax; for(int i = mid-1; i >=low; i--){ tmp += nums[i]; if(tmp > mmax) mmax = tmp; } tmp = mmax; for(int i = mid+1; i <= high; i++){ tmp += nums[i]; if(tmp > mmax) mmax = tmp; } return max(mmax, max(lmax, rmax)); } };
复杂度分析
时间复杂度:
理解题目之后还是觉得此题没太大必要用分治法.
- [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
- 错误 Error: Expected resource of type id [ResourceTyp]
- Android开发 之 ColorFilter详解
- Linux下MySQL 安装配置
- 嵌入式编程中,你应该知道的定点化知识
- vue mock小记
- 53.Maximum Subarray
- Android-IM消息接收事件之EventBus的应用
- 安卓系统dns缓存策略
- 生成pdf报告
- 使用RxJava+OKhttp3进行图片下载
- expect 嵌入shell的for循环中的方式对比
- 【css】css使用水平居中和垂直居中
- Thymeleaf教程 (十) 注释与块
- java 修饰符