目录
每日一句
人这一生最重要的不是别人拥有的和自己缺失的,而是自己所能掌握的
作者简介
🏡个人主页:XiaoChen_Android
📚学习专栏:力扣专栏
🕒发布日期:2022/8/15
『LeetCode|每日一题』等差数列划分
1.每日一题
2.解题思路
2.1 思路分析
S1:首先就要把不符合要求的数列去除掉,即长度小于等于2的数组;
S2:可以定义一个flag来记录答案增加的次数,例如{1,2,3,4},当{1,2,3}符合要求时flag就等于1了,由于公差d没变,所以{2,3,4}也符合要求时flag就等于2了,相当于把{1,2,3,4}这个情况也算进去了,这样就只要遍历一次数组;
S3:当前三个数满足等差数列,指针向后移动一位,此时如果这三位的公差d与前一组不相等的话,那么就要把flag置零,然后把公差d改为现在的d,重新开始第二步;
S4:最后把每次计算的flag加到结果中就是等差数列的总数
2.2 核心代码 (差分+计数)
for(int i = 2 ; i < len ; i ++){
if(nums[i] - nums[i - 1] == d){
flag++;
}else {
d = nums[i] - nums[i - 1];
flag = 0;
}
ans += flag;
}
2.3 全部代码
class Solution {
public int numberOfArithmeticSlices(int[] nums) {
int len = nums.length;
if(len <= 2) return 0;
int ans = 0;
int flag = 0;
int d = nums[1] - nums[0];
for(int i = 2 ; i < len ; i ++){
if(nums[i] - nums[i - 1] == d){
flag++;
}else {
d = nums[i] - nums[i - 1];
flag = 0;
}
ans += flag;
}
return ans;
}
}
2.4 运行结果
🍁 类似题目推荐:
如果文章对你有帮助就支持一下噢,新手尝试,不好的地方请各位大佬多多指教!