LC-581 最短未排序子数组

目标:

给出一个数组,找出里面需要重新排序的最小子数组,从而可以使得数组是升序的。

 

思路:

简单地首先将数组升序排序,然后比较前后与已排序数组不相同的元素,即可找到子数组。

 

代码:

 1 class Solution {
 2 public:
 3     int findUnsortedSubarray(vector<int>& nums) {
 4         // 先排序数组
 5         vector<int> sorted = nums;
 6         for (int i = 0; i < sorted.size(); i++) {
 7             for (int j = i + 1; j < sorted.size(); j++) {
 8                 if (sorted[i] > sorted[j]) {
 9                     int temp = sorted[i];
10                     sorted[i] = sorted[j];
11                     sorted[j] = temp;
12                 }
13             }
14         }
15         int min, max;
16         // 获得左端第一个不同的元素位置
17         for (min = 0; min < nums.size(); min++) {
18             if (sorted[min] != nums[min]) break;
19         }
20         // 获得右端第一个不同元素的位置
21         for (max = nums.size() - 1; max >= 0; max--) {
22             if (sorted[max] != nums[max]) break;
23         }
24         // 计算位置差距长度,输出结果
25         return min == nums.size() ? 0 : max - min + 1;
26     }
27 };

 

posted @ 2018-10-24 16:28  leo_lee  阅读(129)  评论(0编辑  收藏  举报