一、题目说明

题目是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的更多相关文章

  1. LeetCode练题——53. Maximum Subarray

    1.题目 53. Maximum Subarray——Easy Given an integer array nums, find the contiguous subarray (containin ...

  2. go语言刷leetcode - 53 Maximum Subarray

    package main import ( "fmt" "math" ) func maxSubArray(nums []int) int { var larg ...

  3. 41. leetcode 53. Maximum Subarray

    53. Maximum Subarray Find the contiguous subarray within an array (containing at least one number) w ...

  4. Leetcode#53.Maximum Subarray(最大子序和)

    题目描述 给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大. 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4], 连续子序列 [4,-1,2,1] ...

  5. 小旭讲解 LeetCode 53. Maximum Subarray 动态规划 分治策略

    原题 Given an integer array nums, find the contiguous subarray (containing at least one number) which ...

  6. Leetcode之53. Maximum Subarray Easy

    Leetcode 53 Maximum Subarray Easyhttps://leetcode.com/problems/maximum-subarray/Given an integer arr ...

  7. [Leetcode][Python]53: Maximum Subarray

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 53: Maximum Subarrayhttps://leetcode.co ...

  8. 53. Maximum Subarray【leetcode】

    53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...

  9. [array] leetcode - 53. Maximum Subarray - Easy

    leetcode - 53. Maximum Subarray - Easy descrition Find the contiguous subarray within an array (cont ...

随机推荐

  1. Vue系列(六)之常用指令v-model

    v-model 基本使用 修饰符 .trim .number .lazy 前面讲到的插值,其实都是单向绑定,数据变-->视图变.有些元素可以与用户交互,比如input,select等,那么我们希 ...

  2. Python中神秘的-5到256

    注:本文不区分作为编程语言的Python和作为语言实现的Python.后者均默认为CPython. 了解他人对Python源代码的掌握情况,我喜欢问这样一个问题 请问,在Python中,256和257 ...

  3. 读取npz,并显示图像

    import numpy as npimport osimport matplotlib.pyplot as pltimport sysimport cv2 a = np.load('/home/wg ...

  4. python包管理历史

    1.标准库工具distutils,2000年发布,是包安装和发布工具 setup.python 程序,利用distutils 开发 示例: python setup.py install 安装一个包 ...

  5. 9 HTML DOM事件监听&版本兼容&元素(节点)增删改查

    事件监听: 语法:element.addEventListener(event, function, useCapture); event:事件的类型,触发什么事件,注意不需要on作为前缀,比如cli ...

  6. windows安装ActiveMQ以及点对点以及发布订阅

    一.MQ产品的分类 1.RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级 ...

  7. java后端开发echarts

    参考: https://blog.csdn.net/mxdmojingqing/article/details/77340245 https://github.com/abel533/ECharts

  8. Dubbo 18 问

    dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...

  9. underscore.js -2009年发布的js库

    2009 Underscore.js 0.1.0发布 Underscore一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象.它是这个问题的 ...

  10. Day11 - N - Game HDU - 3389

    题目链接 题意是说有1到n个标号的盒子,选择一个非空的盒子A,B是否空无所谓,满足(A+B)%2=1,(A+B)%3=0,A>B 解上面的同余方程组,最小解为3,循环为2*3=6,那我们可以把前 ...