Giả sử chúng ta có một mảng A với n phần tử, và một giá trị c khác ở đó. Có một trình xử lý văn bản điên rồ hiện diện trong hệ thống của chúng tôi, nơi chúng tôi có thể nhập các ký tự nhưng nếu chúng tôi không nhập trong c giây liên tiếp, tất cả các chữ cái đã viết sẽ bị xóa. Dấu [i] thể hiện thời gian chúng ta nhập ký tự thứ i. Chúng tôi phải tìm số ký tự cuối cùng sẽ còn lại trên màn hình sau khi nhập tất cả n ký tự.
Vì vậy, nếu đầu vào là A =[1, 3, 8, 14, 19, 20]; c =5, thì kết quả sẽ là 3, vì ở giây thứ 8 sẽ có 3 từ trên màn hình. Sau đó, mọi thứ biến mất ở giây thứ 13. Ở giây thứ 14 và 19, hai ký tự khác được nhập và cuối cùng, ở giây thứ 20, một ký tự nữa được nhập và tổng cộng 3 ký tự vẫn còn trên màn hình.
Các bước
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
s := 1 n := size of A for initialize i := 1, when i < n, update (increase i by 1), do: if (A[i] - A[i - 1]) <= c, then: (increase s by 1) Otherwise s := 1 return s
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A, int c) { int s = 1; int n = A.size(); for (int i = 1; i < n; i++) { if ((A[i] - A[i - 1]) <= c) { s++; } else { s = 1; } } return s; } int main() { vector<int> A = { 1, 3, 8, 14, 19, 20 }; int c = 5; cout << solve(A, c) << endl; }
Đầu vào
{ 1, 3, 8, 14, 19, 20 }, 5
Đầu ra
3