刷题53. Maximum Subarray
一、题目说明
题目是53. Maximum Subarray,求最长连续子序列最大和。难度是Easy!
二、我的解答
Easy的题目,居然没做出来。
后来看了用dp方法,其中dp[i]表示以第i个元素结尾的最大和。
dp[i] = nums[i] > nums[i]+dp[i-1] ? nums[i] : nums[i]+dp[i-1];
然后求出最大的dp即可。知道思路,实现非常简单,问题是没有往动态规划上面去想。
#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:
int maxSubArray(vector<int>& nums) {
int len=nums.size();
vector<int> dp;
dp.resize(len);
//以第i个元素结尾的最大和
dp[0] = nums[0];
int max = dp[0];
for(int i=1;i<len;i++){
dp[i] = nums[i] > nums[i]+dp[i-1] ? nums[i] : nums[i]+dp[i-1];
max = max > dp[i] ? max : dp[i];
}
return max;
}
};
int main(){
Solution s;
vector<int> m;
m = {-2,1,-3,4,-1,2,1,-5,4};
cout<<(6==s.maxSubArray(m))<<"\n";
m = {-2,1,-3};
cout<<(1==s.maxSubArray(m))<<"\n";
m = {1};
cout<<(1==s.maxSubArray(m))<<"\n";
m = {-2,-1};
cout<<(-1==s.maxSubArray(m))<<"\n";
return 0;
}
性能居然还不错,空间复杂的可以优化,dp复用nums,还是算了,可读性不好:
Runtime: 4 ms, faster than 98.55% of C++ online submissions for Maximum Subarray.
Memory Usage: 9.4 MB, less than 17.65% of C++ online submissions for Maximum Subarray.
三、优化
题目说让用分治算法,分而治之。我想想,应该是类似“二分查找”。不会,看了大神的实现:
class Solution{
public:
//divide & conquer approach
int maxSubArray(vector<int>& nums) {
return maxSubArrayPart(nums,0,nums.size()-1);
}
private:
int maxSubArrayPart(vector<int>& nums,int left,int right){
if(left==right){
return nums[left];
}
int mid = (left+right) / 2;
return max(maxSubArrayPart(nums,left,mid),
max(maxSubArrayPart(nums,mid+1,right),maxSubArrayAll(nums,left,mid,right)));
}
//左右两边求和
int maxSubArrayAll(vector<int>& nums,int left,int mid,int right){
int leftSum = INT_MIN;
int sum=0;
for(int i=mid;i>=left;i--){
sum += nums[i];
if(sum>leftSum) leftSum=sum;
}
sum=0;
int rightSum= INT_MIN;
for(int i=mid+1;i<=right;i++){
sum += nums[i];
if(sum>rightSum) rightSum=sum;
}
return leftSum+rightSum;
}
};
性能:
Runtime: 8 ms, faster than 74.25% of C++ online submissions for Maximum Subarray.
Memory Usage: 9.4 MB, less than 33.33% of C++ online submissions for Maximum Subarray.
刷题53. Maximum Subarray的更多相关文章
- LeetCode练题——53. Maximum Subarray
1.题目 53. Maximum Subarray——Easy Given an integer array nums, find the contiguous subarray (containin ...
- go语言刷leetcode - 53 Maximum Subarray
package main import ( "fmt" "math" ) func maxSubArray(nums []int) int { var larg ...
- 41. leetcode 53. Maximum Subarray
53. Maximum Subarray Find the contiguous subarray within an array (containing at least one number) w ...
- Leetcode#53.Maximum Subarray(最大子序和)
题目描述 给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大. 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4], 连续子序列 [4,-1,2,1] ...
- 小旭讲解 LeetCode 53. Maximum Subarray 动态规划 分治策略
原题 Given an integer array nums, find the contiguous subarray (containing at least one number) which ...
- Leetcode之53. Maximum Subarray Easy
Leetcode 53 Maximum Subarray Easyhttps://leetcode.com/problems/maximum-subarray/Given an integer arr ...
- [Leetcode][Python]53: Maximum Subarray
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 53: Maximum Subarrayhttps://leetcode.co ...
- 53. Maximum Subarray【leetcode】
53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...
- [array] leetcode - 53. Maximum Subarray - Easy
leetcode - 53. Maximum Subarray - Easy descrition Find the contiguous subarray within an array (cont ...
随机推荐
- Flask - flask-mail
flasky中git reset --hard 8e 问题 使用flask-mail通过163邮箱的smtp服务发送token认证邮件,要关闭TLS才能发送 原理 还在研究中 结果
- JUnit + Mockito 单元测试
原 JUnit + Mockito 单元测试(二) 2015年01月05日 17:26:02 sp42a 阅读数:60755 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- Mockito 中文文档 ( 2.0.26 beta )
Mockito 中文文档 ( 2.0.26 beta ) 由于缺乏校对,难免有谬误之处,如果发现任何语句不通顺.翻译错误,都可以在github中的项目提出issue.谢谢~ Mockito框架官方地址 ...
- 【转】How to create a test plan
What is a Test Plan? A TEST PLAN is a detailed document that describes the test strategy, objectives ...
- 最长公共子序列/子串 LCS(模板)
首先区分子序列和子串,序列不要求连续性(连续和不连续都可以),但子串一定是连续的 1.最长公共子序列 1.最长公共子序列问题有最优子结构,这个问题可以分解称为更小的问题 2.同时,子问题的解释可以被重 ...
- k种球若干,取n个球,输出所有取球方案 (模拟)
有K种颜色的小球(K<=10),每种小球有若干个,总数小于100个. 现在有一个小盒子,能放N个小球(N<=8),现在要从这些小球里挑出N个小球,放满盒子. 想知道有哪些挑选方式.注:每种 ...
- 调用百度汇率api 获取各国的汇率值
设置一个定时任务,每天更新汇率java代码如下 package com.thinkgem.jeesite.modules.huiLvApi.service; import java.io.Buffer ...
- C++11通过拷贝构造器拷贝const字段(待解决)
问题梗概如标题所述. 在今天实现Token类的时候,遇到的问题. 我希望将Token类设定为immutable属性的,这样实现的方式是将这个类内的所有字段均设置为const型,同时每个字段均为publ ...
- 随机游走模型(Random Walk)
给定了一个时间顺序向量\(z_1,...,z_T\),rw模型是由次序r来定义的,\(z_t\)仅取决于前\(t-r\)个元素.当r = 1时为最简单的RW模型. 给定了向量的其他元素,\(z_t\) ...
- Django 学习之cookie与session
一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...