413.Arithmetic Slices
来源:互联网 发布:淘宝 全球购 费用 编辑:程序博客网 时间:2024/06/11 18:01
413.题目
Arithmetic Slices
计网实验的教室没开空调热到我上leetcode做题解暑qaq
解题思路
这道题也是动态规划的(动态规划的题目好多
简单来说就是给出一串数字有多少组“3个数字以上”且“间隔相同”的数字。
我的思路就是遍历,假设第i个数字和前面2个数字(即第i-1、i-2个数字)间隔相同,那么说明他们符合条件,这时还要再看一下第i-2个数字之前是否存在与第i-2个元素连续的数字使得第k~i个数字是间隔相同(k < i-2)。若存在,则couter += (i-2)-k+1;若不存在则 couter += 0。
判断前面是否存在“与第i-2个元素连续的数字使得第k~i个数字是间隔相同(k < i-2)“可以用个变量continus来标识”连续数字的长度-2”,但如果第i个数字与前面2个数字不间隔相同,continus置0。
举个例子,[1,2,3,4,7,8,9,0]
从第3个数字开始遍历,
初始值:i = 2,continus = 0, couter = 0
具体代码
- 非递归版本
class Solution {public: int numberOfArithmeticSlices(vector<int>& A) { int couter = 0; int continus = 0; for (int i = 2; i < A.size(); i++) { if (A[i] - A[i-1] == A[i-1] - A[i-2]) { if (continus) { ++continus; couter += continus; } else { ++couter; continus = 1; } } else { continus = 0; } } return couter; }};
(讲道理这里没啥必要用递归
- 递归版本
class Solution {public: int maxlen[5000] = {0}; // 记录从第i个元素开始有多少个连续间隔相同的数字 int getMaxLength(vector<int>& A, int start, int len) { if (len > 3) { int con1 = getMaxLength(A, start + 1, len - 1); int con2 = A[start] - A[start + 1] == A[start + 1] - A[start + 2]; if (con2) if (con1 < 3) maxlen[start] = 3; else maxlen[start] = con1 + 1; } else if (len == 3) if (A[start] - A[start + 1] == A[start + 1] - A[start + 2]) maxlen[start] = 3; return maxlen[start]; } int numberOfArithmeticSlices(vector<int>& A) { getMaxLength(A, 0, A.size()); int couter = 0; for (int i = 0; i < A.size(); i++) { if (maxlen[i] >= 3) couter += maxlen[i] - 2; } return couter; }};
阅读全文
0 0
- 413. Arithmetic Slices
- [LeetCode]413.Arithmetic Slices
- Leetcode 413. Arithmetic Slices
- Leetcode-413. Arithmetic Slices
- 413. Arithmetic Slices
- 413. Arithmetic Slices
- 【LeetCode】413. Arithmetic Slices
- 413. Arithmetic Slices
- Leetcode-413. Arithmetic Slices
- 413. Arithmetic Slices
- 413. Arithmetic Slices
- 413. Arithmetic Slices
- 413. Arithmetic Slices
- LeetCode 413. Arithmetic Slices
- 413. Arithmetic Slices 【M】
- 413. Arithmetic Slices
- Leetcode 413. Arithmetic Slices
- 413. Arithmetic Slices
- 二叉树前序后序中序互推总结
- 【单片机笔记】中颖单片机开发笔记
- centos7 mysql数据库安装
- CSDN博客积分规则和获取积分方法
- C/C++ 二级指针
- 413.Arithmetic Slices
- Diego 架构
- mysql 导入错误 /*!40101 SET NAMES utf8mb4 */;
- eclice快捷键
- redis配置密码
- 2017年9月17日PAT甲级考试反思
- mybatis异常invalid comparison: java.util.Date and java.lang.String(date和string无法比较)
- jeecg 自定义datagurid
- [html&css]Pass Through