---
# System prepended metadata

title: Leetcode 413. Arithmetic Slices
tags: [Leetcode(C++)]

---

# Leetcode 413. Arithmetic Slices
###### tags: `Leetcode(C++)`

題目 : https://leetcode.com/problems/arithmetic-slices/ 。

想法 : 

    找最長Arithmetic Subarray的尾巴在哪裡，找到就計算其可能組合並直接把開頭往後跳。

時間複雜度 : O(n)。

程式碼 :

```
class Solution {
public:  
    int numberOfArithmeticSlices(vector<int>& nums) {
        int l=nums.size(), bk, sum=0;
        
        for(int i=0 ; i<l-2 ; i++){
            if(nums[i+1] - nums[i] == nums[i+2] - nums[i+1]){
                bk=i+2;
                while(nums[bk] - nums[bk-1] == nums[i+1] - nums[i]){
                    bk++;
                    if(bk == l){
                        break;
                    }
                }
                bk--;
                
                //cout << i << " " << bk << endl;
                int total=bk-i+1;
                for(int j=1 ; j<=total-2 ; j++){
                    sum+=j;
                }
                i=bk-1;
            }
        }
        
        return sum;
    }
};
```