数组581. 最短无序连续子数组
Posted ocpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组581. 最短无序连续子数组相关的知识,希望对你有一定的参考价值。
题目:
解答:
- 单调栈
- 正向遍历,单调递增栈,找出自始至终没有出栈的最大索引
l
- 反向遍历,单调递减栈,找出自始至终没有出栈的最小索引
r
- 中间就是需要排序的最小子数组
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不简单)
LeetCode 581 最短无序连续子数组[排序] HERODING的LeetCode之路
LeetCode 581. Shortest Unsorted Continuous Subarray (最短无序连续子数组)
LeetCode 581. 最短无序连续子数组/611. 有效三角形的个数/15. 三数之和/18. 四数之和(双指针)