मान लीजिए नंबर्स का एक सीक्वेंस अंकगणितीय कहलाता है अगर इसमें कम से कम तीन एलिमेंट्स हैं और किन्हीं दो लगातार एलिमेंट्स के बीच का अंतर समान है। उदाहरण के लिए, ये अंकगणितीय सीक्वेंस हैं: [1, 3, 5, 7, 9], [7, 7, 7, 7], [3, -1, -5, -9], लेकिन निम्न सीक्वेंस अंकगणितीय नहीं है: [1, 1, 2, 5, 7]
अब N नंबर्स से बना एक जीरो-इंडेक्स्ड ऐरे A दिया गया है। उस दिए गए ऐरे का एक स्लाइस इंटीजर्स का कोई भी जोड़ा (P, Q) है जैसे कि 0 <= P < Q < N। यहां ऐरे A का एक स्लाइस (P, Q) अंकगणितीय कहलाता है अगर सीक्वेंस: A[P], A[P+1], ..., A[Q-1], A[Q] अंकगणितीय है। फंक्शन को ऐरे A में अंकगणितीय स्लाइसेस की संख्या ढूंढनी चाहिए।
उदाहरण के लिए, अगर इनपुट [1,2,3,4] है, तो आउटपुट 3 होगा, क्योंकि एलिमेंट्स हैं [1,2,3], [2,3,4] और [1,2,3,4]
इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे:
ret := 0, n := A का साइज, साइज n का एक ऐरे dp बनाएं
i को 2 से n-1 तक लूप करें:
अगर a[i] - a[i-1] = a[i-1] - a[i-2], तो:
dp[i] := 1 + dp[i-1]
ret को dp[i] से बढ़ाएं
ret लौटाएं
उदाहरण (C++)
बेहतर समझ के लिए निम्न इम्प्लीमेंटेशन देखें:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int ret = 0;
int n = A.size();
vector <int> dp(n);
for(int i = 2; i < n; i++){
if(A[i] - A[i - 1] == A[i - 1] - A[i - 2]){
dp[i] = 1 + dp[i - 1];
ret += dp[i];
}
}
return ret;
}
};
int main(){
Solution ob;
cout << (ob.removeKdigits("1432219", 3));
}
इनपुट
"1432219" 3
आउटपुट
1219