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

有什么做网站的国企网页制作实训报告总结

有什么做网站的国企,网页制作实训报告总结,欧美网站欣赏,wordpress建站成品图目录 力扣446. 等差数列划分 II - 子序列 解析代码 力扣446. 等差数列划分 II - 子序列 446. 等差数列划分 II - 子序列 难度 困难 给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。 如果一个序列中 至少有三个元素 ,并且任意两个相邻…

目录

力扣446. 等差数列划分 II - 子序列

解析代码


力扣446. 等差数列划分 II - 子序列

446. 等差数列划分 II - 子序列

难度 困难

给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。

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

  • 例如,[1, 3, 5, 7, 9][7, 7, 7, 7] 和 [3, -1, -5, -9] 都是等差序列。
  • 再例如,[1, 1, 2, 5, 7] 不是等差序列。

数组中的子序列是从数组中删除一些元素(也可能不删除)得到的一个序列。

  • 例如,[2,5,10] 是 [1,2,1,2,4,1,5,10] 的一个子序列。

题目数据保证答案是一个 32-bit 整数。

示例 1:

输入:nums = [2,4,6,8,10]
输出:7
解释:所有的等差子序列为:
[2,4,6]
[4,6,8]
[6,8,10]
[2,4,6,8]
[4,6,8,10]
[2,4,6,8,10]
[2,6,10]

示例 2:

输入:nums = [7,7,7,7,7]
输出:16
解释:数组中的任意子序列都是等差子序列。

提示:

  • 1  <= nums.length <= 1000
  • -2^31 <= nums[i] <= 2^31 - 1
class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {}
};

解析代码

力扣873. 最长的斐波那契子序列的长度、力扣1027. 最长等差数列类似,动态规划解法思路:

状态表示:以某个位置为结尾,结合题目要求,先定义一个状态表示:

dp[i] 表示:以 i 位置元素为结尾的所有子序列中,等差数列的个数

        但是这里有⼀个非常致命的问题,那就是我们无法确定 i 结尾的斐波那契序列的样子。这样就会导致我们无法推导状态转移方程,因此我们定义的状态表示需要能够确定一个等差数列

        根据等差数列的特性,我们仅需知道序列里面的最后两个元素,就可以确定这个序列的样子。因此,修改状态表示为:

dp[i][j] 表示:以 i 位置以及 j 位置的元素为结尾的所有的子序列中,等差数列的个数。规定一下 i < j 。

状态转移方程:

设 nums[i] = b, nums[j] = c ,那么这个序列的前一个元素就是 a = 2 * b - c。根据 a 的情况讨论:

  • a 存在,下标为 k ,并且 a < b :此时我们需要以 k 位置以及 i 位置元素为结尾的等差数列的长度,然后再加上 j 位置的元素(+1)即可。于是 dp[i][j] =dp[k][i] + 1 ; 因为 a 可能有很多个,我们需要全部累加起来。p[i][j] +=dp[k][i] + 1 ;
  • a 存在,但是 b < a < c :dp[i][j] =0 ;
  • a 不存在: dp[i][j] = 0 ;

综上,状态转移方程分情况讨论即可。

        优化点:我们发现,在状态转移方程中,我们需要确定 a 元素的下标。因此我们可以在 dp 之前,将所有的元素和下标数组绑定在⼀起,放到哈希表中。这里为什么保存下标数组,是因为要统计个数,所有的下标都需要统计。

        初始化:可以将表里面的值都初始化为 0 。

        填表顺序:先固定斐波那契子序列的最后一个数,然后枚举倒数第二个数。

        返回值:返回 dp 表中的所有值的和。

class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {int n = nums.size(), ret = 0;vector<vector<int>> dp(n, vector<int>(n, 0));// dp[i][j] 表示:以 i 位置以及 j 位置的元素为结尾的所有的子序列中,等差数列的个数。i < j unordered_map<long long, vector<int>> hash(n);for(int i = 0; i < n; ++i){hash[nums[i]].push_back(i);}for(int j  = 2; j < n; ++j) // 固定倒数第一个数{for(int i = 1; i < j; ++i) // 先固定倒数第二个数{long long a = (long long)2 * nums[i] - nums[j]; // 防溢出if(hash.count(a)){for(auto& k : hash[a]){if(k < i)dp[i][j] += dp[k][i] + 1;elsebreak;}}ret += dp[i][j];}}return ret;}
};
http://www.yayakq.cn/news/503664/

相关文章:

  • 太平洋在线企业网站管理系统php .net做网站哪个好
  • 网站落地页和普通网页免费加速器永久免费版不用登录
  • 有哪些好的做兼职的网站wordpress more标签
  • 省机关事务局网站建设管理情况集翔网大网站建设
  • 自动做PPT的网站百度下载安装2022最新版
  • 深圳专业网站建设产品运营之中的广度讲解怎么建网站平台卖东西
  • 网站 谁建设谁负责深圳那家做APP网站的最好
  • 网站的服务器怎么做的东莞招聘网最新招聘信息
  • 代刷推广网站大连建站平台
  • 汕头网站开发服务我爱做衣服网站
  • 合肥网站建设技术托管网站开发盈亏平衡分析表
  • 检测网站是否被墙计算机网络技术是干嘛的
  • 自己做高仿衣服网站查域名注册
  • 金阊网站建设wordpress 用户留言
  • 萍乡网站建设哪家好规范网站维护 建设 管理
  • 宁德市城乡住房建设厅网站城市宣传网站建设方案
  • 到位app做网站需要些程序wordpress 统计浏览量
  • 肥城网站建设方案网站空间购买时选择什么脚本语言
  • 烟台网站建设托管设计企业
  • 毕业设计做网站做什么好wordpress批量传图片大小
  • 网站建设用什么技术wordpress侧边栏在哪调
  • 个人商城网站源码下载怎么用dw做响应式网站
  • 怎么制作单页网站新闻头条最新消息今天
  • 外贸 模板网站 定制网站郑州网站建设 论坛
  • 郑州建设网站报价微信公众平台 网站开发
  • 宝安区建设工程交易服务中心云南效果好的网站优化
  • 如何建论坛网站备案域名购买阿里云
  • 建站流程主要有哪些企业网站建设方案及报价
  • 专业网站建设在哪里wordpress ajax 分页
  • 最专业网站建设公网站建设-纵横网络