本内容为最大子序列的求和和求积。采用DP的思路,

当前值加上小于之前值,则从该节点重新算起。

这个代码只能返回其结果值,但不能返回最后的子序列(待修改)。

class Solution:
def maxSubArray(self,arr): #最大子数组和的DP求解
if not arr:return
cur_sub,max_sub = arr[0],arr[0] #记录当前集合和最大集合
res = [arr[0]]
for i in range(1,len(arr)): #从第二个开始遍历
if arr[i] + cur_sub > arr[i]: #如果说加上下一个数比当前值大,那么最大的会在当前值后面
cur_sub += arr[i] #更新当前值
max_sub = max(cur_sub,max_sub) #比较得到当前和最大的较大值
res.append(arr[i]) #有误,记录其最大的值
else: #否则的话就小于,则从当前值开始算起
res = []
max_sub = max(arr[i],cur_sub,max_sub,cur_sub+arr[i])#从当前的候选值选个最大的
cur_sub = arr[i] #从当前开始算起
res.append(arr[i]) #记录该子数组的节点
return max_sub,res
def maxSubArry_1(self,arr):
if not arr:return
for i in range(1,len(arr)):
arr[i] = max(arr[i],arr[i]+arr[i-1])
print(arr[i],end=',')
return max(arr)
def maxProduct(self,nums): #子数组求积
if not nums: return 0
res, curmax, curmin = nums[0], nums[0], nums[0] #当前最大和最小
for i in range(1, len(nums)): #从第二个开始遍历
curmax = curmax * nums[i] #与当前值计算看乘积,求最大
curmin = curmin * nums[i] #如果是负数,计算最小值
curmax = max(curmax, curmin, nums[i]) #选一个最大的
curmin = min(curmax, curmin, nums[i]) #选一个最小的
res = curmax if curmax > res else res #最终的结果缓存在res里面
return res if __name__ == '__main__':
solution = Solution()
arr = [-2,1,-3,4,-1,2,1,-7,-5,4]
resSub,res = solution.maxSubArray(arr)
print('最大子数组为:',res,'其和为:',resSub)
res_1 = solution.maxSubArry_1(arr)
print(res_1)
resProduct = solution.maxProduct(arr)
print('最大子数组乘积:',resProduct)

力扣152,53题,最大子序列求和and积的更多相关文章

  1. leetcode 力扣第七题: 整数反转

    哇,发现会写算法的人好牛逼啊,而且好像大多写算法的都不用PHP,哈哈哈哈哈,在领扣里面都没有php这个选项,真尴尬 从几个月之前就想刷题了,但是不会啊,很懵逼啊,昨天搜了一下答案,好像才打开了我这个写 ...

  2. 力扣(LeetCode)67. 二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...

  3. LeetCode | 力扣周赛C题 5370. 设计地铁系统

    请你实现一个类 UndergroundSystem ,它支持以下 3 种方法: checkIn(int id, string stationName, int t) 编号为 id 的乘客在 t 时刻进 ...

  4. 刷题-力扣-剑指 Offer 42. 连续子数组的最大和

    剑指 Offer 42. 连续子数组的最大和 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de ...

  5. 力扣50题 Pow(x,n)

    本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...

  6. 力扣485. 最大连续1的个数-C语言实现-简单题

    题目 [题目传送门] 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3 ...

  7. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  8. 【Warrior刷题笔记】力扣169. 多数元素 【排序 || 哈希 || 随机算法 || 摩尔投票法】详细注释 不断优化 极致压榨

    题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element/ 注意,该题在LC中被标注为easy,所以我们更多应该关 ...

  9. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

随机推荐

  1. 在 centos 上安装 virutalbox

    目录 简介 centos 6.x 安装 virtual box Step 1 – Add Required Yum Repositories Step 2 – Install Required Pac ...

  2. VS使用日常

    一.快捷键 1.Ctrl R+E    选中变量快捷自动生成属性

  3. ②将SVN迁移到GitLab-多分支多标签迁移

    之前我们介绍了<①将SVN迁移到GitLab-单分支迁移>,文中研究了svn迁移到git单分支的操作过程,本文针对实际开发过程中svn使用到的trunk.branches.tags情况进行 ...

  4. JML规格编程系列——OO Unit3分析和总结

    本文是BUAA OO课程Unit3在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.主要包含JML相关梳理.SMT Solver验证.JML单元 ...

  5. 不能在本机启动SQL Server服务错误代码126(要在协议里面禁用所有别的VIA,是怎么回事?)

    在启动数据库sql服务的时候提示[Windows 不能在 本地计算机 启动 SQL Server . 有关更多信息,查阅系统事件日志.如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定 ...

  6. 5.安装CentOS后,开机找不到Win10的启动选项解决办法

    现象:在Win10下安装了CentOS7双系统,开机后,居然发现找不到Win10启动选项,默认进入了CentOS系统. 解决办法: 方法一:笔者一般是用创建一个Win10启动盘,电脑重启进入启动盘后, ...

  7. springboot+security整合(1)

    说明 springboot 版本 2.0.3源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+se ...

  8. 智慧图携手DataPipeline,让实体商业更智慧!

    近日,国内领先的实体商业数字化运营服务商智慧图携手DataPipeline,基于专业的数据集成与应用基础展开了合作. 未来DataPipeline将通过不断提升自身产品和服务实力,与智慧图一道致力于帮 ...

  9. paroot忘记root密码

    打开虚拟机在倒计时进入系统前按下e键然后按照下图修改即可 crtl+x重启 mount –rw –o remount /保证磁盘可读写 然后执行passwd

  10. Step by Step to create orders by consuming SAP Commerce Cloud Restful API

    Recently Jerry is working on an integration project about creating orders in Wechat platform by cons ...