581. Shortest Unsorted Continuous Subarray

Posted 高数考了59

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了581. Shortest Unsorted Continuous Subarray相关的知识,希望对你有一定的参考价值。

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     int findUnsortedSubarray(vector<int>& nums) 
12     {
13         int sz=nums.size();
14         int beg=-1,end=-2,maxele=nums[0],minele=nums[sz-1];
15         for(int i=1;i<sz;i++)
16         {
17             maxele=max(maxele,nums[i]);
18             minele=min(minele,nums[sz-1-i]);
19             if(nums[i]<maxele) end=i;
20             if(nums[sz-1-i]>minele) beg=sz-1-i;
21         }
22         return end-beg+1;
23     }
24 };

这个方法很骚,线性时间,解释一波

从前向后扫描,maxele存放从nums[0]到nums[i]之间的最大元素,和当前元素比较,若当前元素nums[i]小于这个最大值,则更新end

从后往前扫描,minele存放从nums[sz-1]到当前元素中的最小值,和当前于元素比较,若当前元素大于这个最小值,则更新beg

1  2  3  6  4  5  7  8  9

       beg          end

再说明一下就是,

只有前面的元素是排序后的最终元素时,beg才不会向前移动。如果不是最终位置,必然会有某个元素会大于minele,然后更新beg

只有后面的元素是排序后最终元素时,end才不会向后移动。如果不是最终位置,必然会有某个元素小于maxele,然后更新end

以上是关于581. Shortest Unsorted Continuous Subarray的主要内容,如果未能解决你的问题,请参考以下文章

581. Shortest Unsorted Continuous Subarray

LeetCode - 581. Shortest Unsorted Continuous Subarray

Shortest Unsorted Continuous Subarray LT581

581. Shortest Unsorted Continuous Subarray (LeetCode)

刷题581. Shortest Unsorted Continuous Subarray

581. Shortest Unsorted Continuous Subarray