মান লক্ষ্য করুন একটি n এলিমেন্টের অ্যারে A। এই অ্যারেতে কিছু এলিমেন্ট A[i]কে লোকাল মিনিমাম বলা হবে যদি এবং কেবল যদি সেটি তার দুটি প্রতিবেশীর চেয়ে স্ট্রিক্টলি কম হয়। আর যদি সেটি তার প্রতিবেশীদের চেয়ে স্ট্রিক্টলি বেশি হয় তবে সেটি লোকাল ম্যাক্সিমাম। A[0] এবং A[n-1]-এর জন্য যেহেতু শুধু এক প্রতিবেশী আছে তাই সেগুলো ম্যাক্সিমা বা মিনিমা নয়। আমাদের দিয়ে गये অ্যারেতে লোকাল এক্স্ট্রিমার সংখ্যা বের করতে হবে।
তাই, যদি ইনপুট হয় A = [1, 5, 2, 5], তবে আউটপুট হবে ২, কারণ A[1]-এ ৫ লোকাল ম্যাক্সিমা এবং A[2]-এ ২ লোকাল মিনিমা।
ধাপসমূহ
এটি সমাধান করার জন্য, আমরা এই ধাপগুলো অনুসরণ করব −
sum := 0
n := size of A
for initialize i := 1, when i < n - 1, update (increase i by 1), do:
if (A[i] < A[i - 1] and A[i] < A[i + 1]) or (A[i] > A[i + 1] and A[i] > A[i - 1]), then:
(increase sum by 1)
return sum
উদাহরণ
বेहतर বোঝার জন্য ইমপ্লিমেন্টেশন দেখি −
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
int sum = 0;
int n = A.size();
for (int i = 1; i < n - 1; i++)
if ((A[i] < A[i - 1] && A[i] < A[i + 1]) || (A[i] > A[i + 1] && A[i] > A[i - 1]))
sum++;
return sum;
}
int main(){
vector<int> A = { 1, 5, 2, 5 };
cout << solve(A) << endl;
}
ইনপুট
{ 1, 5, 2, 5 }
আউটপুট
2