C++程序中移除K位数字
假设我们有一串数字,如果它至少包含三个元素,并且任意两个连续元素之间的差值相同,则称之为等差数列。例如,以下是等差数列:[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],A[p + 1],...,A[Q - 1],A[Q]是等差数列,则称数组A的切片(P, 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; } }; main(){ Solution ob; cout << (ob.removeKdigits("1432219", 3)); }
输入
"1432219" 3
输出
1219
广告