在C ++程序中删除K位

假设我们有一个数字序列,如果它由至少三个元素组成,并且任意两个连续元素之间的差相同,则称为算术序列。因此,例如,这些是算术序列:[1、3、5、7、9],[7、7、7、7],[3,-1,-5,-9],但以下序列不是算术。[1、2、5、7]

现在给出了一个由N个数字组成的零索引数组A。该给定数组的一个切片是任意一对整数(P,Q),使得0 <= P <Q <N。这里,如果序列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

  • 当我在2到n – 1的范围内时

    • dp [i]:= 1 + dp [i-1]

    • 将ret增加dp [i]

    • 如果a [i] – a [i – 1] = a [i – 1] – a [i – 2],则

    • 返回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

    以上是 在C ++程序中删除K位 的全部内容, 来源链接: utcz.com/z/338397.html

    回到顶部