力扣152,53题,最大子序列求和and积
本内容为最大子序列的求和和求积。采用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积的更多相关文章
- leetcode 力扣第七题: 整数反转
哇,发现会写算法的人好牛逼啊,而且好像大多写算法的都不用PHP,哈哈哈哈哈,在领扣里面都没有php这个选项,真尴尬 从几个月之前就想刷题了,但是不会啊,很懵逼啊,昨天搜了一下答案,好像才打开了我这个写 ...
- 力扣(LeetCode)67. 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...
- LeetCode | 力扣周赛C题 5370. 设计地铁系统
请你实现一个类 UndergroundSystem ,它支持以下 3 种方法: checkIn(int id, string stationName, int t) 编号为 id 的乘客在 t 时刻进 ...
- 刷题-力扣-剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de ...
- 力扣50题 Pow(x,n)
本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...
- 力扣485. 最大连续1的个数-C语言实现-简单题
题目 [题目传送门] 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3 ...
- 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...
- 【Warrior刷题笔记】力扣169. 多数元素 【排序 || 哈希 || 随机算法 || 摩尔投票法】详细注释 不断优化 极致压榨
题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element/ 注意,该题在LC中被标注为easy,所以我们更多应该关 ...
- 力扣算法题—069x的平方根
实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...
随机推荐
- 在 centos 上安装 virutalbox
目录 简介 centos 6.x 安装 virtual box Step 1 – Add Required Yum Repositories Step 2 – Install Required Pac ...
- VS使用日常
一.快捷键 1.Ctrl R+E 选中变量快捷自动生成属性
- ②将SVN迁移到GitLab-多分支多标签迁移
之前我们介绍了<①将SVN迁移到GitLab-单分支迁移>,文中研究了svn迁移到git单分支的操作过程,本文针对实际开发过程中svn使用到的trunk.branches.tags情况进行 ...
- JML规格编程系列——OO Unit3分析和总结
本文是BUAA OO课程Unit3在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.主要包含JML相关梳理.SMT Solver验证.JML单元 ...
- 不能在本机启动SQL Server服务错误代码126(要在协议里面禁用所有别的VIA,是怎么回事?)
在启动数据库sql服务的时候提示[Windows 不能在 本地计算机 启动 SQL Server . 有关更多信息,查阅系统事件日志.如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定 ...
- 5.安装CentOS后,开机找不到Win10的启动选项解决办法
现象:在Win10下安装了CentOS7双系统,开机后,居然发现找不到Win10启动选项,默认进入了CentOS系统. 解决办法: 方法一:笔者一般是用创建一个Win10启动盘,电脑重启进入启动盘后, ...
- springboot+security整合(1)
说明 springboot 版本 2.0.3源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+se ...
- 智慧图携手DataPipeline,让实体商业更智慧!
近日,国内领先的实体商业数字化运营服务商智慧图携手DataPipeline,基于专业的数据集成与应用基础展开了合作. 未来DataPipeline将通过不断提升自身产品和服务实力,与智慧图一道致力于帮 ...
- paroot忘记root密码
打开虚拟机在倒计时进入系统前按下e键然后按照下图修改即可 crtl+x重启 mount –rw –o remount /保证磁盘可读写 然后执行passwd
- 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 ...