NC384. 132序列
描述
示例1
输入:
[1,2,3,2,1]
输出:
true
示例2
输入:
[82,78,12,42,65]
输出:
false
C 解法, 执行用时: 32ms, 内存消耗: 4208KB, 提交时间: 2022-07-09
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return bool布尔型 * * C语言声明定义全局变量请加上static,防止重复定义 */ #include <stdbool.h> #include <limits.h> int stack[100000]; int top = -1; bool find132Subseq(int* nums, int numsLen ) { int i, min; int t = INT_MIN; for (i = numsLen - 1; i >= 0; i--) { if (nums[i] < t) { return true; } while (top != -1 && stack[top] < nums[i]) { t = stack[top--]; } stack[++top] = nums[i]; } return false; } // bool find132Subseq(int* nums, int numsLen ) { // int t = 0; // int stack[100000], sTop = 0; // for (int i = numsLen - 1; i >= 0; i--) { // if (nums[i] < t) { // return true; // } // while ((sTop != 0) && (nums[i] > stack[sTop - 1])) { // t = stack[sTop-1]; // sTop--; // } // stack[sTop++] = nums[i]; // } // return false; // }
C++ 解法, 执行用时: 32ms, 内存消耗: 4336KB, 提交时间: 2022-08-02
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return bool布尔型 */ bool find132Subseq(vector<int>& nums) { // write code here int n = nums.size(); stack<int> stk; int k = INT_MIN; // 记录 2 // 枚举 1 for (int i = n - 1; i >= 0; i --) { int a = nums[i]; // 1 if (a < k) return true; // 1 < 2 // stk.top() 是 3 while(stk.size() && stk.top() < a) { k = max(k, stk.top()); // 2 尽可能取最大 stk.pop(); } // 作为 3 入栈 stk.push(a); } return false; } };
C++ 解法, 执行用时: 34ms, 内存消耗: 4224KB, 提交时间: 2022-05-12
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return bool布尔型 */ bool find132Subseq(vector<int>& nums) { // write code here int n = nums.size(); if(n<3) return false; vector<int> lMin(n); stack<int> stk; lMin[0] = nums[0]; for(int i=1; i<n; i++) lMin[i] = min(lMin[i-1], nums[i]); for(int i=n-1; i>=0; i--) { if(nums[i] == lMin[i]) continue; while(!stk.empty() && stk.top()<=lMin[i]) stk.pop(); if(!stk.empty() && stk.top()<nums[i]) return true; stk.push(nums[i]); } return false; } };
C++ 解法, 执行用时: 34ms, 内存消耗: 4420KB, 提交时间: 2022-07-02
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return bool布尔型 */ bool find132Subseq(vector<int>& nums) { // write code here stack<int> st; st.push(nums[0]); for(int i=1;i<nums.size();i++) { int ctl=-1; while(!st.empty()&&(st.top()>nums[i])) { if(st.size()>=2) { ctl=0; } st.pop(); } if(!st.empty()) { ctl++; } if(ctl==1) { return true; } st.push(nums[i]); } return false; } };
C 解法, 执行用时: 36ms, 内存消耗: 4216KB, 提交时间: 2022-05-23
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return bool布尔型 * * C语言声明定义全局变量请加上static,防止重复定义 */ #include<limits.h> int stack[100000]; int top=-1; bool find132Subseq(int* nums, int numsLen ) { // write code here int i,min; int t=INT_MIN; for(i=numsLen-1;i>=0;i--) { if(nums[i]<t) return true; while(top!=-1&&stack[top]<nums[i]) t=stack[top--]; stack[++top]=nums[i]; } return false; }