Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

132 C++의 패턴

<시간/>

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