等差数列划分--关于子串的数量规律
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等差数列划分--关于子串的数量规律相关的知识,希望对你有一定的参考价值。
题目
解法一:dfs暴力解法 O(N^2)
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
int n = nums.size();
if(n<3)return 0;
int gap[n];
memset(gap,0,sizeof gap);
int index = 1;
//把数组的所有相邻差值记录下来
for(int i=0;i<n-1;i++){
gap[index++] = nums[i+1]-nums[i];
}
int cnt = 0;
//dfs爆搜
function<void(int ,int)> dfs = [&](int k,int pos){
if(k>=1)
cnt++;
if(pos>n-1)
return;
if(gap[pos]==gap[pos-1])
dfs(k+1,pos+1);
};
for(int i=2;i<n;i++){
dfs(0,i);
}
return cnt;
}
};
解法二:利用子串数量规律实现O(N)
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
int n = nums.size();
if (n == 1) {
return 0;
}
int d = nums[0] - nums[1], t = 0;
int ans = 0;
// 因为等差数列的长度至少为 3,所以可以从 i=2 开始枚举
for (int i = 2; i < n; ++i) {
if (nums[i - 1] - nums[i] == d) {
++t;
}
else {
d = nums[i - 1] - nums[i];
t = 0;
}
ans += t;
}
return ans;
}
};
以上是关于等差数列划分--关于子串的数量规律的主要内容,如果未能解决你的问题,请参考以下文章
647. Palindromic Substrings 回文子串的数量