当前位置: 首页 > wzjs >正文

网站模板和源码手机免费建网站

网站模板和源码,手机免费建网站,网页网站,网站的栏目建设在哪里1.题目基本信息 1.1.题目描述 如果一个长度为 n 的数组 arr 符合下面其中一个条件&#xff0c;可以称它 连续&#xff1a; 对于所有的 1 < i < n&#xff0c;arr[i] - arr[i - 1] 1。对于所有的 1 < i < n&#xff0c;arr[i] - arr[i - 1] -1。 数组的 值 是…

1.题目基本信息

1.1.题目描述

如果一个长度为 n 的数组 arr 符合下面其中一个条件,可以称它 连续:

  • 对于所有的 1 <= i < n,arr[i] - arr[i - 1] == 1。
  • 对于所有的 1 <= i < n,arr[i] - arr[i - 1] == -1。

数组的 值 是其元素的和。

例如,[3, 4, 5] 是一个值为 12 的连续数组,并且 [9, 8] 是另一个值为 17 的连续数组。而 [3, 4, 3] 和 [8, 6] 都不连续。

给定一个整数数组 nums,返回所有 连续 非空 子序列 的 值 之和。

由于答案可能很大,返回它对 109 + 7 取模 的值。

注意 长度为 1 的数组也被认为是连续的。

1.2.题目地址

https://leetcode.cn/problems/sum-of-consecutive-subsequences/description/

2.解题方法

2.1.解题思路

动态规划

时间复杂度:O(n)

2.2.解题步骤

第一步,状态定义。dpup[i][0]表示以i结尾的最长连续递增子序列的长度(也就是能够匹配的数组的数量),dpup[i][0]表示以i结尾的所有连续递增子序列的求和结果。dpdown[i][0]表示以i结尾的最长连续递减子序列的长度(也就是能够匹配的连续递减数组的数量),dpdown[i][0]表示以i结尾的所有连续递减子序列的求和结果。

第二步,状态初始化。dpup[][0]=0,dpup[][1]=0;dpdown[][0]=0,dpdown[][1]=0

第三步,状态转移。dpup[i][0]+=dpup[i-1][0]+1,dpup[i][1]+=dpup[i-1][1]+i*(dpup[i-1][0]+1);dpdown[i][0]+=dpdown[i+1][0]+1,dpdown[i][1]+=dpdown[i+1][1]+i*(dpdown[i+1][0]+1)(注:这里使用的是+=的递推符号,因为nums后面可能出现重复的数字)

第四步,最终的sum(dpup)+sum(dpdown)-sum(nums)即为题解(因为up和down都算了一次单元素数组,所以需要减去sum(nums)的部分)

3.解题代码

Python代码

class Solution:def getSum(self, nums: List[int]) -> int:# 思路:动态规划m = max(nums)# 第一步,状态定义。dpup[i][0]表示以i结尾的最长连续递增子序列的长度(也就是能够匹配的数组的数量),dpup[i][0]表示以i结尾的所有连续递增子序列的求和结果。dpdown[i][0]表示以i结尾的最长连续递减子序列的长度(也就是能够匹配的连续递减数组的数量),dpdown[i][0]表示以i结尾的所有连续递减子序列的求和结果。dpup = [[0, 0] for _ in range(m + 2)]dpdown = [[0, 0] for _ in range(m + 2)]# 第二步,状态初始化。dpup[*][0]=0,dpup[*][1]=0;dpdown[*][0]=0,dpdown[*][1]=0# 第三步,状态转移。dpup[i][0]+=dpup[i-1][0]+1,dpup[i][1]+=dpup[i-1][1]+i*(dpup[i-1][0]+1);dpdown[i][0]+=dpdown[i+1][0]+1,dpdown[i][1]+=dpdown[i+1][1]+i*(dpdown[i+1][0]+1)(注:这里使用的是+=的递推符号,因为nums后面可能出现重复的数字)for i in nums:dpup[i][0] += dpup[i - 1][0] + 1dpup[i][1] += dpup[i - 1][1] + i * (dpup[i - 1][0] + 1)dpdown[i][0] += dpdown[i + 1][0] + 1dpdown[i][1] += dpdown[i + 1][1] + i * (dpdown[i + 1][0] + 1)# 第四步,最终的sum(dpup)+sum(dpdown)-sum(nums)即为题解(因为up和down都算了一次单元素数组,所以需要减去sum(nums)的部分)mod = 10 ** 9 + 7result = (sum([dpup[i][1] + dpdown[i][1] for i in range(m + 1)]) - sum(nums)) % modreturn int(result)

4.执行结果

http://www.dtcms.com/wzjs/105240.html

相关文章:

  • 全球建站天津关键词排名提升
  • 服务器上怎么搭建网站国家免费职业技能培训官网
  • 网站后台下载企业营销策划实训报告
  • 仁寿建设局网站百度一下官网首页百度
  • 网站开发的大学生应届简历《新闻联播》 今天
  • 陕西网页制作qq群怎么优化排名靠前
  • 网站建设工具最简洁的公众号推广引流
  • 网站开发的形式有( )十大跨境电商erp排名
  • 东莞网站新站排名手机网站模板建站
  • 网站开发全程设计seo公司 彼亿营销
  • 成都个人网站开发怎么做竞价托管
  • 那个网站做拍手比较好网络营销专业培训学校
  • 武汉免费网站制作seo搜索优化招聘
  • 做国外零售做什么网站搜索引擎广告优化
  • dedecms 网站安装广告投放公司
  • 做ppt赚钱网站seo优化搜索推广
  • 做垃圾网站赚钱seo哪家好
  • 知名做网站的公司百度指数功能模块有哪些
  • 东莞网站制作百年球队排名世界
  • 环保公司网站建设方案百度云账号登录
  • 百度优化师站长工具seo排名查询
  • 怎样免费自己做网站视频怎么做电商生意
  • 佛山做外贸网站方案游戏推广赚佣金的平台
  • 做简单鬼畜视频的网站如何做好宣传推广
  • 怎么做自己的外卖网站淘宝关键词排名优化
  • 外链图片 wordpress苏州关键词优化排名推广
  • 品牌建设新徐州关键词优化排名
  • 营销网站建设网站制作公司seo技术培训唐山
  • wordpress站点美化深圳网络推广营销公司
  • 烟台网站制作厂家联系方式如何seo网站推广