本文最后更新于224 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com
1.题目基本信息
1.1.题目描述
如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
- 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。
子数组 是数组中的一个连续序列。
1.2.题目地址
https://leetcode.cn/problems/arithmetic-slices/description/
2.解题方法
2.1.解题思路
滑动窗口
2.2.解题步骤
第一步,构建维护变量。l维护等差数列的第一个元素的索引;r维护等差数列的最后一个元素的索引;d维护当前等差数列的公差;result维护结果变量
第二步,遍历;滑窗,更新维护变量
-
2.1.移动滑动窗口的右边界,直到不能构建等差数列
-
2.2.更新窗口左边界,以及相应的维护变量
3.解题代码
python代码
class Solution:
def numberOfArithmeticSlices(self, nums: List[int]) -> int:
# 思路:滑动窗口
n = len(nums)
if n == 1:
return 0
# 第一步,构建维护变量。l维护等差数列的第一个元素的索引;r维护等差数列的最后一个元素的索引;d维护当前等差数列的公差;result维护结果变量
l, r = 0, 1
d = nums[l + 1] - nums[l]
result = 0
# 第二步,遍历;滑窗,更新维护变量
while r < n:
# 2.1.移动滑动窗口的右边界,直到不能构建等差数列
while r + 1 < n and nums[r + 1] - nums[r] == d:
r += 1
result += r - l - 1
# 2.2.更新窗口左边界,以及相应的维护变量
l = r
r = l + 1
if r < n:
d = nums[r] - nums[l]
return result
c++代码
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
int n = nums.size();
if (n == 1) {
return 0;
}
int l = 0, r = 1;
int d = nums[r] - nums[l];
int result = 0;
while (r < n) {
while (r + 1 < n && nums[r + 1] - nums[r] == d) {
r++;
result += r - l - 1;
}
l = r;
r = l + 1;
if (r < n) {
d = nums[r] - nums[l];
}
}
return result;
}
};
4.执行结果










