Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Xóa K Chữ Số Trong C++ Chương Trình


Giả sử một dãy số được gọi là dãy số học (arithmetic) nếu nó gồm ít nhất ba phần tử và hiệu giữa hai phần tử liên tiếp bất kỳ là như nhau. Ví dụ: [1,3,5,7,9], [7,7,7,7], [3,-1,-5,-9] là dãy số học. [1,1,2,5,7] không phải.

Cho mảng A gồm N số. Một cặp (P, Q) với 0 ≤ P < Q < N gọi là một lát cắt (slice). Lát cắt (P, Q) của A được gọi là số học nếu dãy A[P], A[P+1], ..., A[Q] là số học. Hàm phải tìm số lượng các lát cắt số học trong mảng A.

Ví dụ: [1,2,3,4] → 3, vì các lát cắt: [1,2,3], [2,3,4], [1,2,3,4].

Để giải quyết, chúng ta làm theo các bước:

  • ret := 0, n := kích thước A, tạo mảng dp kích thước n.

  • Với i từ 2 đến n-1: nếu A[i] - A[i-1] == A[i-1] - A[i-2], thì dp[i] = 1 + dp[i-1]; ret += dp[i].

  • Trả về ret.

Ví dụ (C++)

Hãy xem triển khai sau để hiểu rõ hơn:

#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));
}

Đầu vào

"1432219" 3

Đầu ra

1219