码迷,mamicode.com
首页 > 其他好文 > 详细

581. Shortest Unsorted Continuous Subarray

时间:2018-06-05 21:07:47      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:solution   从后往前   bar   最大值   public   turn   lse   span   pre   

 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

标签:solution   从后往前   bar   最大值   public   turn   lse   span   pre   

原文地址:https://www.cnblogs.com/zhuangbijingdeboke/p/9141513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!