একটি পজিটিভ ইন্টিজার অ্যারে দেওয়া আছে। রিলেশনাল অপারেটর (<, >, <=, >=, ==) ব্যবহার ছাড়া সর্বোচ্চ মান বের করতে হবে।
উদাহরণ
ইনপুট: arr = {5,1,6,7,8,2} → আউটপুট: 8
অ্যালগরিদম: রিপিটেড সাবট্র্যাকশন
দুটি সংখ্যা তুলনা করতে হলে দুটো থেকে একসাথে ১ বিয়োগ করুন। যে সংখ্যাটি بعد পর্যন্ত ০ হয় না, সেটিই বড়।
returnMax(x, y)ফাংশনেxএবংyকে একসাথে ডিক্রিমেন্ট করুন যতক্ষণে যেকোনো একটি ০ হয়।- লুপ কাউন্ট = max(x,y)।
- অ্যারেতে প্রথম দুটি এলিমেন্টের ম্যাক্স বের করুন, তারপর বাকিগুলোর সাথে কমপেয়ার করুন।
C++ প্রোগ্রাম
#include <iostream>
using namespace std;
int returnMax(int x, int y) {
int c = 0;
while (x || y) {
if (x) x--;
if (y) y--;
c++;
}
return c;
}
int findMaxEle(int A[], int N) {
int maxVal = A[0];
for (int i = N-1; i; i--)
maxVal = returnMax(maxVal, A[i]);
return maxVal;
}
int main() {
int A[] = {5,1,6,7,8,2};
int N = sizeof(A)/sizeof(A[0]);
cout << "The maximum element of the array is " << findMaxEle(A, N);
return 0;
}
আউটপুট
The maximum element of the array is 8
ব্যাখ্যা
returnMaxদুটি সংখ্যার ম্যাক্স বের করে লুপ কাউন্ট রিটার্ন করে।findMaxEleসারিটি অ্যারেতে প্রসার করে সর্বোচ্চ বের করে।- কোনো
if (a > b)ব্যবহার হয়নি — শুধু ডিক্রিমেন্ট এবং লুপ কন্ডিশন। - টাইম কমপ্লেক্সিটি:
O(N × maxVal)— বড় ভ্যালুর জন্য অনুপযুক্ত, শুধু কনসেপ্ট ডেমো।
বাস্তবায়নে
রিয়েল ওয়ার্ল্ডে এই পদ্ধতি ব্যবহার করা হয় না। এটি শুধু লজিক্যাল চ্যালেঞ্জ/ইন্টারভিউ পাজলের জন্য। বাস্তবে std::max_element বা সিম্পল কমপ্যারিজন ব্যবহার করুন।