मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, हमें यह जांचना होगा कि क्या त्रिगुण (i, j, k) हैं जैसे कि i
इसलिए, यदि इनपुट संख्या =[2, 12, 1, 4, 4] की तरह है, तो आउटपुट सही होगा, क्योंकि [2, 12, 4] मानदंड से मेल खाता है क्योंकि 2 <4 <12.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n :=अंकों का आकार
आकार n के बाईं ओर एक सरणी परिभाषित करें
बाएं [0] :=अंक[0]
इनिशियलाइज़ करने के लिए मैं :=1, जब i
बाएँ [i] :=न्यूनतम अंक [i] और बाएँ [i - 1]
एक स्टैक सेंट परिभाषित करें
इनिशियलाइज़ करने के लिए i :=n-1, जब i>=1, अपडेट करें (i से 1 घटाएं), −
एक्स:=बाएं [i - 1]
जबकि सेंट खाली नहीं है और सेंट के ऊपर <=x, करें -
सेंट से पॉप
यदि सेंट खाली नहीं है और x
सही लौटें
nums[i] सेंट में पुश करें
झूठी वापसी
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool solve(vector<int>& nums) {
int n = nums.size();
vector<int> left(n);
left[0] = nums[0];
for (int i = 1; i < n; i++) {
left[i] = min(nums[i], left[i - 1]);
}
stack<int> st;
for (int i = n - 1; i >= 1; i--) {
int x = left[i - 1];
while (!st.empty() && st.top() <= x)
st.pop();
if (!st.empty() && x < nums[i] && nums[i] > st.top())
return true;
st.push(nums[i]);
}
return false;
}
};
bool solve(vector<int>& nums) {
return (new Solution())->solve(nums);
}
int main(){
vector<int> v = {2, 12, 1, 4, 4};
cout << solve(v);
}
इनपुट
{2, 12, 1, 4, 4}
आउटपुट
1