[Leetcode] 413. Arithmetic Slices 解题报告
来源:互联网 发布:电影下载软件 编辑:程序博客网 时间:2024/06/05 14:23
题目:
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:
1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9
The following sequence is not arithmetic.
1, 1, 2, 5, 7
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.
Example:
A = [1, 2, 3, 4]return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself.
思路:
1、动态规划:定义dp[i]表示以A[i]结尾的等差数列的个数,则状态转移方程为:如果A[i]加入之后不破坏以A[i-1]结尾的等差数列,则dp[i] = dp[i-1] + 1;否则dp[i] = 0。该算法的时间复杂度是O(n),空间复杂度也是O(n)。
2、找规律:这个方法本质上还是动态规划,只是把空间复杂度进一步降低到了O(1),确实还挺巧妙的,详细解法请见:http://blog.csdn.net/camellhf/article/details/52824234。
代码:
1、动态规划:
class Solution {public: int numberOfArithmeticSlices(vector<int>& A) { int n = A.size(); if (n < 3) { return 0; } vector<int> dp(n, 0); // dp[i] means the number of arithmetic slices ending with A[i] if (A[2] - A[1] == A[1] - A[0]) { dp[2] = 1; // if the first three numbers are arithmetic or not } int result = dp[2]; for (int i = 3; i < n; ++i) { if (A[i]-A[i-1] == A[i-1]-A[i-2]) { dp[i] = dp[i-1] + 1; } result += dp[i]; // accumulate all valid slices } return result; }};
2、找规律:
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 解题报告
- LeetCode解题报告 413. Arithmetic Slices [medium]
- [LeetCode]413. Arithmetic Slices 解题报告
- [Leetcode] 413. Arithmetic Slices 解题报告
- Leetcode 413. Arithmetic Slices 所有等差序列 解题报告
- [LeetCode]413.Arithmetic Slices
- Leetcode 413. Arithmetic Slices
- Leetcode-413. Arithmetic Slices
- 【LeetCode】413. Arithmetic Slices
- Leetcode-413. Arithmetic Slices
- LeetCode 413. Arithmetic Slices
- Leetcode 413. Arithmetic Slices
- LeetCode 413. Arithmetic Slices
- [LeetCode]413. Arithmetic Slices
- LeetCode 413. Arithmetic Slices
- 【LeetCode】 413. Arithmetic Slices
- [LeetCode]413. Arithmetic Slices
- [leetcode]413. Arithmetic Slices
- 在同一个类中调用其他有注解(如@Async,@Transactianal)的方法,注解失效问题
- Invalid bound statement (not found)
- 使用Charles进行http/https抓包
- 51nod 最大M子段和 V1,V2,V3 dp 贪心 heap(bzoj2288)
- Python csv模块读文件错误 _csv.Error: new-line character seen in unquoted field
- [Leetcode] 413. Arithmetic Slices 解题报告
- 图片放大效果
- Android开发之第三方框架使用汇总
- Java NIO与IO
- windows 脚本中取当前时间
- MFC中Control在浮动窗口中disable的解决方法
- oracle-初级使用(表操作)
- 邻接表模型
- ios 后台返回json数据里还有数组集合时,model的配置,model套model