ধরুন আমরা N আকারের একটি সাজানো পূর্ণসংখ্যার অ্যারে দিয়েছি। কাজটি হল অ্যারেতে উপস্থিত স্বতন্ত্র সর্বোচ্চ এবং দ্বিতীয় সর্বোচ্চ উপাদান খুঁজে বের করা। অ্যারেতে ডুপ্লিকেট উপাদানও থাকতে পারে। তাই আমাদের শুধুমাত্র স্বতন্ত্র উপাদান খুঁজে বের করতে হবে। উদাহরণস্বরূপ,
ইনপুট-1 −
N = 5 A[ ] = { 2, 2, 1, 3, 4 }
আউটপুট −
4 3
ব্যাখ্যা − প্রদত্ত অ্যারে থেকে, আমরা দেখতে পাচ্ছি '4' সর্বাধিক এবং '3' দ্বিতীয় সর্বোচ্চ৷
ইনপুট-2 −
N = 4 A[ ] = { 1,3,3,2 }
আউটপুট −
3 2
ব্যাখ্যা − সাইজ 4 এর প্রদত্ত অ্যারে থেকে, আমরা দেখতে পাচ্ছি '3' বৃহত্তম এবং '2' দ্বিতীয় বৃহত্তম তাই আমরা আউটপুট হিসাবে 3 2 ফেরত দেব।
এই সমস্যা সমাধানের পদ্ধতি
N আকারের প্রদত্ত অ্যারেতে, কিছু সদৃশ উপাদানও থাকতে পারে। অ্যারে থেকে সর্বোচ্চ এবং দ্বিতীয় সর্বোচ্চ উপাদান খুঁজে পেতে আমরা দুটি ভেরিয়েবল শুরু করতে পারি যা সর্বোচ্চ এবং দ্বিতীয় সর্বোচ্চ সংরক্ষণ করে।
প্রাথমিকভাবে, যদি বর্তমান উপাদানটি সর্বাধিকের চেয়ে বড় হয় তবে আমরা এটির মান সর্বাধিক এবং সর্বাধিক (আগের) এর মানটি দ্বিতীয় সর্বোচ্চে সংরক্ষণ করব।
স্বতন্ত্র উপাদান খুঁজে পেতে, আমরা বর্তমান উপাদান সর্বোচ্চ সমান কিনা তা পরীক্ষা করব। যদি বর্তমান মান সর্বোচ্চের সমান না হয় এবং দ্বিতীয় সর্বোচ্চের থেকেও বেশি হয়, তাহলে আমরা বর্তমান মান দিয়ে দ্বিতীয় সর্বোচ্চের পূর্ববর্তী মান প্রতিস্থাপন করব।
-
শুরু করুন এবং অ্যারের N আকারের ইনপুট নিন।
-
একটি ফাংশন maxAndSecondMax(int arr[], int size) ইনপুট হিসাবে একটি অ্যারে নেয় এবং অ্যারের আকার। যা প্রদত্ত অ্যারের সর্বোচ্চ এবং দ্বিতীয় সর্বোচ্চ উপাদান প্রদান করে।
-
অ্যারের উপাদানগুলির উপর পুনরাবৃত্তি করুন এবং বর্তমান উপাদানটি সর্বাধিকের চেয়ে বড় কিনা তা সন্ধান করুন তারপরে বর্তমান মানটিকে সর্বাধিক এবং দ্বিতীয় সর্বাধিকের সাথে সর্বাধিকের পূর্ববর্তী মান সংরক্ষণ করুন৷
-
অন্যথায়, বর্তমান মান দ্বিতীয় সর্বোচ্চ থেকে বেশি হলে, বর্তমান মান দিয়ে পূর্ববর্তী মান প্রতিস্থাপন করুন। এছাড়াও, বর্তমান মান সর্বোচ্চ সমান হওয়া উচিত নয়।
-
দ্বিতীয় সর্বোচ্চটিতে কোনো মান নেই কিনা তা পরীক্ষা করুন৷
৷ -
চূড়ান্ত আউটপুট হিসাবে সর্বোচ্চ এবং দ্বিতীয় সর্বোচ্চ ফেরত দিন।
উদাহরণ
#include<bits/stdc++.h> using namespace std; void maxAndSecondMax(int *arr, int size){ int max= INT_MIN; int s_max= INT_MIN; for(int i=0;i<size; ++i){ if(arr[i] >max){ s_max= max; max= arr[i]; } else if(arr[i]> s_max && arr[i]!= max){ s_max= arr[i]; } } if(s_max==INT_MIN){ s_max= -1; } cout<<max<<" "<<s_max; } int main(){ int N= 6; int A[N]= {1,3,2,5,6,3}; maxAndSecondMax(A,N); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি রান করি, তাহলে এটি আউটপুটটিকে
হিসাবে প্রিন্ট করবে6 5
6 এবং 5 অ্যারের মধ্যে স্বতন্ত্র উপাদান যা সর্বোচ্চ এবং দ্বিতীয় সর্বোচ্চ।