LeetCode 413 Arithmetic Slices详解
这个开始自己做的动态规划复杂度达到了O(n), 是用的是2维的矩阵来存前面的数据,复杂度太高了, 虽然好理解,但是没效率,后面看这个博客发现没有动态规划做了这个题 也是比较厉害。
转载地址:
https://blog.csdn.net/camellhf/article/details/52824234#commentBox
LeetCode 413. Arithmetic Slices 解题报告
题目描述
A sequence of number is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.
For example, these are arithmetic sequence:
The following sequence is not arithmetic.
A zero-indexed array A consisting of N numbers is given. A slice of that array is any pair of integers (P, Q) such that 0 <= P < Q < N.
A slice (P, Q) of array A is called arithmetic if the sequence:
A[P], A[p + 1], …, A[Q - 1], A[Q] is arithmetic. In particular, this means that P + 1 < Q.
The function should return the number of arithmetic slices in the array A.
示例
限制条件
没有明确给出.
解题思路
我的思路:
这道题的题目不是一般的长,其实就是一个意思:给你一串数字,返回这串数字中能够构成等差数列的子串的数目。
我的想法是通过扫描一遍数组就能得到结果,所以得先知道如果扫描发现下一个数字能够加入到等差数列中,那么总的数目会有怎样的变化。
因此,我列出了下表:
| 数组 | 等差数列的数目 | 与上一数组的等差数列数目比较 |
|---|---|---|
| 1 2 3 | 1 | 1 - 0 = 1 |
| 1 2 3 4 | 3 | 3 - 1 = 2 |
| 1 2 3 4 5 | 6 | 6 - 3 = 3 |
| 1 2 3 4 5 6 | 10 | 10 - 6 = 4 |
| 1 2 3 4 5 6 7 | 15 | 15 - 10 = 5 |
观察就能发现两个等差数列数目之差(表格第三列)就是[1,2, 3, 4, 5……]这个序列,因此每次增加一个等差数列的元素,总的等差数列的数目就会增加[1,2, 3, 4, 5……]中对应的数值。
按照这一点,在代码实现时就设置一个变量addend,表示增加的数目,它对应着[1,2, 3, 4, 5……]这个序列,如果下一个数组元素能够加入到等差数列中,addend就自增1,然后总的数目就增加addend。如果下一个数组元素不能加入到等差数列中,addend就重置为0。这样通过一个循环就能获得结果。
做完看了看其他人的代码,目前发现的最好的解法就是跟我一样的,似乎还没有更好的,其他稍复杂的解法就不贴出来了。
代码
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int count = 0;
int addend = 0;
for (int i = 2; i < A.size(); i++)
if (A[i - 1] - A[i] == A[i - 2] - A[i - 1])
count += ++addend;
else
addend = 0;
return count;
}
}
LeetCode 413 Arithmetic Slices详解的更多相关文章
- LN : leetcode 413 Arithmetic Slices
lc 413 Arithmetic Slices 413 Arithmetic Slices A sequence of number is called arithmetic if it consi ...
- [LeetCode]413 Arithmetic Slices
A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...
- LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告
1.题目大意 A sequence of number is called arithmetic if it consists of at least three elements and if th ...
- Leetcode 413. Arithmetic Slice 算术序列切片(动态规划,暴力)
Leetcode 413. Arithmetic Slice 算术序列切片(动态规划,暴力) 题目描述 如果一个数组1.至少三个元素2.两两之间差值相同,那么这个数组就是算术序列 比如下面的数组都是算 ...
- Week 8 - 338.Counting Bits & 413. Arithmetic Slices
338.Counting Bits - Medium Given a non negative integer number num. For every numbers i in the range ...
- 【LeetCode】413. Arithmetic Slices 等差数列划分
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 双指针 递归 动态规划 日期 题目地址:htt ...
- 【Leetcode】413. Arithmetic Slices
Description A sequence of number is called arithmetic if it consists of at least three elements and ...
- 413. Arithmetic Slices
/**************************Sorry. We do not have enough accepted submissions.*********************** ...
- LeetCode 446. Arithmetic Slices II - Subsequence
原题链接在这里:https://leetcode.com/problems/arithmetic-slices-ii-subsequence/ 题目: A sequence of numbers is ...
随机推荐
- 【JVM之内存与垃圾回收篇】类加载子系统
类加载子系统 概述 完整图如下: 如果自己想手写一个 Java 虚拟机的话,主要考虑哪些结构呢? 类加载器 执行引擎 类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载 Class 文件, ...
- Asp.Net Core 附加进程调试
第一种:VS调试 vs打开项目,F5启动调试 第二种:附加到w3wp.exe进程调试 一.安装NET Core Windows Server Hosting软件包 安装 .NET Core 托管捆绑包 ...
- Cypress系列(41)- Cypress 的测试报告
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 注意 51 testting 有一篇文章 ...
- 删除表中重复数据,只删除重复数据中ID最小的
delete t_xxx_user where recid in ( select recid from t_xxx_user where recid in ( select min(recid) f ...
- Centos7安装Docker1.9.1
1.先检查是否安装旧版本docker [root@registry ~]# rpm -qa|grep docker 我这里没有安装,如果安装,请rpm -e 卸载2.编辑docker.repo文件,写 ...
- Laravel 使用阿里云 oss 存储对象
一.下载安装 composer require jacobcyl/ali-oss-storage 二.注册服务提供者 在config/app.php的providers下添加: //阿里云OSS对象存 ...
- Jquery日历编写小练习
日历练习 总体效果展示: 代码展示: 源代码部分 <body> <!-- 日历--> <div class="div_sty"> <tab ...
- Day13_Thymeleaf简介
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 1.Th ...
- Day04_乐优商城项目搭建
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...
- hashlib加密算法
# import hashlib # mima = hashlib.md5()#创建hash对象,md5是信息摘要算法,生成128位密文 # print(mima) # # mima.update(' ...