Giả sử chúng ta có một mảng A với n phần tử và tất cả các phần tử đều khác biệt. Có n trong số những người vào vòng chung kết tại chỗ có thể tham gia vào một công ty, thứ hạng đủ điều kiện của họ nằm trong mảng A. Chúng ta phải tìm ra số lượng thí sinh tối thiểu có thể từ chối lời mời thi đấu tại chỗ trong vòng cuối cùng. Sẽ có 25 người trong số đó, một số ít đã chấp nhận hoặc một số ít từ chối.
Vì vậy, nếu đầu vào là A =[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28], thì đầu ra sẽ là 3, vì ngày 1, 13 và 27 chắc chắn đã giảm.
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 -
mx := 0 for initialize i := 0, when i < size of A, update (increase i by 1), do: mx := maximum of mx and A[i] return maximum of mx - 25 and 0
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 mx = 0; for (int i = 0; i < A.size(); i++) mx = max(mx, A[i]); return max(mx - 25, 0); } int main(){ vector<int> A = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28 }; cout << solve(A) << endl; }
Đầu vào
{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28 }
Đầu ra
3