LC-581 最短未排序子数组
Posted leo-lzj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 };
以上是关于LC-581 最短未排序子数组的主要内容,如果未能解决你的问题,请参考以下文章
581. Shortest Unsorted Continuous Subarray 最短未排序的连续子阵列