मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, हमें यह जांचना होगा कि क्या त्रिगुण (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