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

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 <= nums.length <= 5000
  • -1000 <= nums[i] <= 1000

思路

       因为题目中给出的数组并不是等差数列,所以我们需要判断相邻的三个数是否为等差数列,如果是,我们就要计算以当前循环中的nums[i]结尾的等差数列的个数有多少,把数组中以每个数为结尾的等差数列的个数全部加起来就是最终我们需要的结果。代码中c[i]=c[i-1]+1就表示在原先找到的等差数列的基础上又找到一个更长的等差数列,在用count+=c[i]把所有结果都加起来就是最终的结果。

代码

class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {int n=nums.size(),count=0;if(n<3)//数组长度小于3,不构成等差数列{return 0;}vector<int> c(n,0);for(int i=2;i<n;i++){if(nums[i]-nums[i-1]==nums[i-1]-nums[i-2])//判断这三个数是否为等差数列{c[i]=c[i-1]+1;//c[i]表示以nums[i]结尾的等差数列的个数count+=c[i];//到索引i的等差数列的个数}}return count;}
};

http://www.lqws.cn/news/444241.html

相关文章:

  • day09——Java基础项目(ATM系统)
  • Github 热点项目 [特殊字符]PHP性能革命!FrankenPHP让Laravel/Symfony飞起来!
  • 目标检测之YOLOV11自定义数据预处理——从原始标注到YOLO-OBB格式转换与验证
  • SecureCRT 安装、破解、汉化及配色方案优化指南
  • OpenSSL引擎 + PKCS11 + SoftHSM2认证
  • 【技术管理的第一次转身】从认知到落地的12个实战模块
  • 【算力网络】算网安全
  • MySQL: Invalid use of group function
  • Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?
  • Java中的守护线程与非守护线程
  • 用 STM32 HAL/LL + Arduino 混合编程
  • LeetCode 662. 二叉树的最大宽度
  • F接口基础.go
  • JETBRAINS IDE 开发环境自定义设置快捷键
  • 单服务器部署多个Discuz! X3.5站点并独立Redis配置方案
  • redux以及react-redux
  • 使用springboot实现过滤敏感词功能
  • c++ STL---vector使用
  • 6.19_JAVA_微服务
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • 煤矿井下Modbus转Profibus网关的传感器与PLC互联解决方案
  • 基于keepalived、vip实现高可用nginx (centos)
  • TensorFlow+CNN垃圾分类深度学习全流程实战教程
  • 【目标检测】IOU的概念与Python实例解析
  • Qt蓝图式技能编辑器状态机模块设计与实现
  • Datawhale 网络爬虫技术入门第2次笔记
  • CD45.【C++ Dev】STL库的list的使用
  • redis02
  • 什么是Spark
  • 【Dify 沙箱网络问题排查与解决】