n개의 정수 a1, a2, ..., an, a 132 패턴이 i
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
n :=숫자의 크기, n이 0이면 false를 반환
-
크기가 n인 minVals라는 배열을 정의하고 minVals[0]:=nums[0]
를 설정합니다. -
범위 1에서 n – 1까지의 I에 대해
-
minVals[i] :=minVals[i - 1] 및 nums[i]
의 최소값
-
-
스택 생성
-
범위 n – 1에서 1까지의 I
-
minVal :=minVals[i – 1]
-
curr :=nums[j]
-
st가 비어 있지 않고 스택의 맨 위가 <=minVal
인 동안-
스택에서 삭제
-
-
st가 비어 있지 않고 스택
-
s
에 숫자[i]를 삽입합니다.
-
-
거짓 반환
예시(C++)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
-->
#include <bits/stdc++.h> using namespace std; class Solution { public: bool find132pattern(vector<int>& nums) { int n = nums.size(); if(!n) return false; vector <int> minVals(n); minVals[0] = nums[0]; for(int i = 1; i < n; i++){ minVals[i] = min(minVals[i - 1], nums[i]); } stack <int> s; for(int i = n - 1; i > 0; i--){ int minVal = minVals[i - 1]; int curr = nums[i]; while(!s.empty() && s.top() <= minVal) s.pop(); if(!s.empty() && s.top() < curr) return true; s.push(nums[i]); } return false; } }; main(){ vector<int> v = {-1,3,2,0}; Solution ob; cout << (ob.find132pattern(v)); }
입력
[-1,3,2,0]
출력
1