刷题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 ...
随机推荐
- Vue系列(六)之常用指令v-model
v-model 基本使用 修饰符 .trim .number .lazy 前面讲到的插值,其实都是单向绑定,数据变-->视图变.有些元素可以与用户交互,比如input,select等,那么我们希 ...
- Python中神秘的-5到256
注:本文不区分作为编程语言的Python和作为语言实现的Python.后者均默认为CPython. 了解他人对Python源代码的掌握情况,我喜欢问这样一个问题 请问,在Python中,256和257 ...
- 读取npz,并显示图像
import numpy as npimport osimport matplotlib.pyplot as pltimport sysimport cv2 a = np.load('/home/wg ...
- python包管理历史
1.标准库工具distutils,2000年发布,是包安装和发布工具 setup.python 程序,利用distutils 开发 示例: python setup.py install 安装一个包 ...
- 9 HTML DOM事件监听&版本兼容&元素(节点)增删改查
事件监听: 语法:element.addEventListener(event, function, useCapture); event:事件的类型,触发什么事件,注意不需要on作为前缀,比如cli ...
- windows安装ActiveMQ以及点对点以及发布订阅
一.MQ产品的分类 1.RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级 ...
- java后端开发echarts
参考: https://blog.csdn.net/mxdmojingqing/article/details/77340245 https://github.com/abel533/ECharts
- Dubbo 18 问
dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...
- underscore.js -2009年发布的js库
2009 Underscore.js 0.1.0发布 Underscore一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象.它是这个问题的 ...
- Day11 - N - Game HDU - 3389
题目链接 题意是说有1到n个标号的盒子,选择一个非空的盒子A,B是否空无所谓,满足(A+B)%2=1,(A+B)%3=0,A>B 解上面的同余方程组,最小解为3,循环为2*3=6,那我们可以把前 ...