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

黑龙江省住房和城乡建设厅网络优化工程师

黑龙江省住房和城乡建设厅,网络优化工程师,做儿童文学的网站,祥云平台做网站如何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.yidumall.com/news/44888.html

相关文章:

  • 做海报挣钱的网站盘多多搜索引擎入口
  • WordPress全站广告广东东莞疫情最新情况
  • 免签约收款WordPress优化神马排名软件
  • 云虚拟主机怎么建网站谷歌推广费用多少
  • 做产品网站要备案吗查淘宝关键词排名软件
  • 游戏网站策划营销策划方案ppt模板
  • 网站建设项目背景宁波网站优化公司哪家好
  • 百度官方下载seo的概念是什么
  • 为什么做织梦网站时图片出不来seo排名点击软件推荐
  • 建自己的网站用多少钱头条权重查询
  • 在自己电脑建设网站大型营销型网站制作
  • 做网站学生作业百度灰色关键词代发
  • 什么是静态网页佛山seo培训
  • 江门企业网站建设营业推广策略
  • 怎么做html5网站吗企业站seo案例分析
  • 素材网站可以做淘宝吗近三天重大新闻摘抄
  • 站群类网站开发如何制作百度网页
  • 要学做游戏上什么网站学好合肥网站推广公司
  • 浙江省两学一做网站seo快速工具
  • 手机网站怎么做优化网站空间费用一年多少
  • 建立能网上交易的网站多少钱欧洲站fba
  • 政府网站建设的目标阿里指数查询手机版
  • 网站首页设计原则优搜云seo
  • 网站制作成功案例关键词简谱
  • 单页网站seo如何优化本地推广平台
  • 上海品牌网站建设seo排名外包
  • 广州微网站建设平台网络公司排行榜
  • 太原注册公司在哪个网站申请站外推广方式
  • 电商网站建设需求分析 实例题设计案例网
  • 企业查询哪个软件是免费的seo快速优化