数组581. 最短无序连续子数组

Posted ocpc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组581. 最短无序连续子数组相关的知识,希望对你有一定的参考价值。

题目:

技术图片

 

 

 

解答:

  1. 单调栈
  2. 正向遍历,单调递增栈,找出自始至终没有出栈的最大索引 l
  3. 反向遍历,单调递减栈,找出自始至终没有出栈的最小索引 r
  4. 中间就是需要排序的最小子数组
 1 class Solution {
 2 public:
 3     int findUnsortedSubarray(vector<int>& nums) 
 4     {
 5         stack<int> st;
 6         int l = nums.size() - 1;
 7         int r = 0;
 8         for (int i = 0; i < nums.size(); i++)
 9         {
10             while (!st.empty() && nums[st.top()] > nums[i])
11             {
12                 l = min(l, st.top());
13                 st.pop();
14             }
15             st.push(i);
16         }
17         
18         st = stack<int>();
19         for (int i = nums.size() - 1; i >= 0; i--)
20         {
21             while (!st.empty() && nums[st.top()] < nums[i])
22             {
23                 r = max(r, st.top());
24                 st.pop();
25             }
26             st.push(i);
27         }
28         return (r > l) ? r - l + 1 : 0;
29     }
30 };

 

以上是关于数组581. 最短无序连续子数组的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

leetcode581 最短无序连续子数组(Easy不简单)

数组581. 最短无序连续子数组

LeetCode 581 最短无序连续子数组[排序] HERODING的LeetCode之路

LeetCode 581. Shortest Unsorted Continuous Subarray (最短无序连续子数组)

LeetCode 581. 最短无序连续子数组/611. 有效三角形的个数/15. 三数之和/18. 四数之和(双指针)