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

纳雍网站建设公司百度河南代理商

纳雍网站建设公司,百度河南代理商,过期域名,wordpress 作者 描述413. 等差数列划分 链接: 413. 等差数列划分 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums ,返回…

413. 等差数列划分

链接: 413. 等差数列划分

如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。

例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。

子数组 是数组中的一个连续序列。

示例 1:

输入:nums = [1,2,3,4]
输出:3
解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。
示例 2:

输入:nums = [1]
输出:0

1.状态表示*
dp[i] 表⽰必须「以 i 位置的元素为结尾」的等差数列有多少种

2.状态转移方程
对于 dp[i] 位置的元素 nums[i] ,会与前⾯的两个元素有下⾯两种情况:

  1. i. nums[i - 2], nums[i - 1], nums[i] 三个元素不能构成等差数列:那么以 nums[i]为结尾的等差数列就不存在此时 dp[i] = 0
  2. ii. nums[i - 2], nums[i - 1], nums[i] 三个元素可以构成等差数列:那么以 nums[i - 1] 为结尾的所有等差数列后⾯填上⼀个 nums[i] 也是⼀个等差数列,此时 dp[i] = dp[i - 1] 。但是,因为 nums[i- 2], nums[i - 1], nums[i] 三 者⼜能构成⼀个新的等差数列,因此要在之前的基础上再添上⼀个等差数列,于是 dp[i] = dp[i - 1] + 1

3. 初始化

由于需要⽤到前两个位置的元素,但是前两个位置的元素⼜⽆法构成等差数列,因此 dp[0] =dp[1] = 0 。

4. 填表顺序
根据「状态转移⽅程」易得,填表顺序为「从左往右」

5. 返回值
因为我们要的是所有的等差数列的个数,因此需要返回整个 dp 表⾥⾯的元素之和。

代码:

int numberOfArithmeticSlices(vector<int>& nums) {int n=nums.size();vector<int> dp(n);int sum=0;for(int i=2;i<n;i++){if(nums[i]-nums[i-1]==nums[i-1]-nums[i-2]){dp[i]=dp[i-1]+1;sum+=dp[i];}}return sum;}

在这里插入图片描述

978. 最长湍流子数组

链接: 978. 最长湍流子数组

给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。

如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。

更正式地来说,当 arr 的子数组 A[i], A[i+1], …, A[j] 满足仅满足下列条件时,我们称其为湍流子数组:

若 i <= k < j :
当 k 为奇数时, A[k] > A[k+1],且
当 k 为偶数时,A[k] < A[k+1];
或 若 i <= k < j :
当 k 为偶数时,A[k] > A[k+1] ,且
当 k 为奇数时, A[k] < A[k+1]。

示例 1:

输入:arr = [9,4,2,10,7,8,8,1,9]
输出:5
解释:arr[1] > arr[2] < arr[3] > arr[4] < arr[5]
示例 2:

输入:arr = [4,8,12,16]
输出:2
示例 3:

输入:arr = [100]
输出:1

1.状态表示*
需要两个 dp 表:

  1. f[i] 表⽰:以 i 位置元素为结尾的所有⼦数组中,最后呈现「上升状态」下的最⻓湍流数组的⻓度;
  2. g[i] 表⽰:以 i 位置元素为结尾的所有⼦数组中,最后呈现「下降状态」下的最⻓湍流数组的⻓度

2.状态转移方程
对于 i 位置的元素 arr[i] ,有下⾯两种情况:

  1. i. arr[i] > arr[i - 1] :如果 i 位置的元素⽐ i - 1 位置的元素⼤,说明接下来 应该去找 i -1 位置结尾,并且 i - 1 位置元素⽐前⼀个元素⼩的序列,那就是 g[i- 1] 。更新 f[i] 位置的值: f[i] = g[i - 1] + 1 ;

  2. ii. arr[i] < arr[i - 1] :如果 i 位置的元素⽐ i - 1 位置的元素⼩,说明接下来 应该去找 i - 1位置结尾,并且 i - 1 位置元素⽐前⼀个元素⼤的序列,那就是 f[i - 1] 。更新 g[i] 位置的值: g[i] = f[i- 1] + 1 ;

  3. ii. arr[i] == arr[i - 1] :不构成湍流数组。

3. 初始化
所有的元素「单独」都能构成⼀个湍流数组,因此可以将 dp 表内所有元素初始化为 1 。 由于⽤到前⾯的状态,因此我们循环的时候从第⼆个位置开始即可

4. 填表顺序
根「从左往右,两个表⼀起填」

5. 返回值
应该返回「两个 dp 表⾥⾯的最⼤值」

代码:

int maxTurbulenceSize(vector<int>& arr) {int n=arr.size();vector<int> f(n,1),g(n,1);int len=1;for(int i=1;i<n;i++){if(arr[i]>arr[i-1]){f[i]=g[i-1]+1;}if(arr[i]<arr[i-1]){g[i]=f[i-1]+1;}len=max(len,max(f[i],g[i]));}return len;}

在这里插入图片描述

http://www.ds6.com.cn/news/35635.html

相关文章:

  • 做音乐网站中国网评中国网评
  • 做网站的励志故事怎么做网站排名
  • java做网站连sqlsever微博关键词排名优化
  • 厦门专业网站建设建站深圳网站设计公司哪家好
  • 邯郸做网站公司哪家好交换友情链接
  • 公司介绍网站源码深圳网站做优化哪家公司好
  • 江苏住房城乡建设网站夫唯seo
  • 河北怎样做网站广州网站到首页排名
  • 郑州建网站价广告做到百度第一页
  • 免费咨询疾病的网站百度教育
  • 内部卷网站怎么做的seo排名策略
  • 怎样给网站做一张背景宁波网站推广方式怎么样
  • 网上怎么自己审核营业执照品牌seo推广咨询
  • 做电影网站的工具产品推广方案ppt
  • 重庆汽车网站建设流量宝
  • 萧县建设局网站美食软文300字
  • 网站建设和管理心得万能引流软件
  • 网站建设的5个步骤是什么seo兼职招聘
  • 优秀企业网站制作网络营销的种类
  • 网站有哪些风格广告推广怎么做
  • 山东网站建设哪家权威怎么制作链接网页
  • 佛山 做网站最新新闻事件今天国内大事
  • 网站设计权限网站搜索引擎优化的步骤
  • 怎么用dw做简单网站在线检测网站安全
  • 自己做网站下载怎么东莞seo网络营销
  • 哪些做任务可以赚钱的网站seo基础篇
  • 网站建设的安全可行性正规seo关键词排名哪家专业
  • 做网站带微好吗东莞搜索排名提升
  • 单页面网站怎么做合肥百度网站排名优化
  • 唐山seo设计网站南宁网站优化