ধরুন আমাদের একটি বৃত্তাকার অ্যারে আছে (শেষ উপাদানটির পরবর্তী উপাদানটি অ্যারের প্রথম উপাদান), আমাদের প্রতিটি উপাদানের জন্য পরবর্তী বৃহত্তর সংখ্যা প্রদর্শন করতে হবে। এখানে একটি সংখ্যা x এর পরবর্তী বৃহত্তর সংখ্যাটি অ্যারের পরবর্তী ট্র্যাভার্সিং-অর্ডারের প্রথম বৃহত্তর সংখ্যা, এর মানে আমরা এর পরবর্তী বৃহত্তর সংখ্যাটি খুঁজে পেতে বৃত্তাকারভাবে অনুসন্ধান করতে পারি। যদি এটি উপস্থিত না থাকে তবে এটি -1 হবে। সুতরাং যদি সংখ্যা [1, 2, 1, 3, 2, 1] হয়, তাহলে আউটপুট হবে:[2,3,3,-1,3,2]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=অ্যারের আকার
- রেস নামক একটি অ্যারে সংজ্ঞায়িত করুন, n আকারের, এবং এটিকে -1 দিয়ে পূরণ করুন, একটি স্ট্যাক স্ট্যাক সংজ্ঞায়িত করুন
- আমি 0 থেকে 2n
- পরিসরে
- index :=i mod n, x :=nums[index]
- যদিও st খালি নয় এবং nums[স্ট্যাকের উপরে]
- res[স্ট্যাকের উপরে] :=x
- স্ট্যাক থেকে শীর্ষ উপাদান মুছুন
- স্ট্যাকের মধ্যে সূচী ঢোকান
উদাহরণ(C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << v[i] << ", ";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
vector <int> res(n, - 1);
stack <int> st;
for(int i = 0; i < 2 * n; i++){
int idx = i % n;
int x = nums[idx];
while(!st.empty() && nums[st.top()] < x){
res[st.top()] = x;
st.pop();
}
st.push(idx);
}
return res;
}
};
main(){
Solution ob;
vector<int> v = {1,2,1,3,2,1};
print_vector(ob.nextGreaterElements(v));
} ইনপুট
[1,2,1,3,2,1]
আউটপুট
[2,3,3,-1,3,2]