LeetCode 最短无序连续子数组

题目链接:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/

题目大意:

  略.

分析:

  如果排序区间为 [L, R], 那么 nums[L] 一定大于区间内的最小值,而 nums[R] 一定大于区间内的最大值, 按照这个特性分别求出左右端点即可.

代码如下:

 1 const int inf = 0x7fffffff;
 2 
 3 class Solution {
 4 public:
 5     int findUnsortedSubarray(vector<int>& nums) {
 6         int L = 0, R = -1;
 7         int N = nums.size();
 8         int maxNum = -inf, minNum = inf;
 9         
10         for(int i = 0; i < N; ++i) {
11             if(maxNum <= nums[i]) maxNum = nums[i];
12             else R = i;
13         }
14         
15         for(int i = N - 1; i >= 0; --i) {
16             if(minNum >= nums[i]) minNum = nums[i];
17             else L = i;
18         }
19         
20         return R - L + 1;
21     }
22 };
View Code

 

posted @ 2019-09-06 15:39  梦樱羽  阅读(349)  评论(0编辑  收藏  举报
Live2D