Leetcode.581 最短无序连续子数组
给你一个整数数组 nums
,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。
示例 1:
**输入:**nums = [2,6,4,8,10,9,15]
**输出:**5
**解释:**你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
示例 2:
**输入:**nums = [1,2,3,4]
**输出:**0
示例 3:
**输入:**nums = [1]
**输出:**0
提示:
1 <= nums.length <= 104
-105 <= nums[i] <= 105
进阶:你可以设计一个时间复杂度为 O(n)
的解决方案吗?
常规思路
和排序后的数组进行比较即可
1 | func findUnsortedSubarray(nums []int) int { |
一次遍历的话,先观察示例,从左往右看,数字应该是递增的,如果发现当前数字比前一个小,说明这个数字不符合条件,需要把边界更新到这里,同时更新已经遍历过的 max 数值,当某个 idx 之后,边界不再更新,根据我们设定的条件,这个 idx 右边的数应该都比 max 要大,这个 idx 比 max 要小,所以这个就是符合条件的右边界。同理,找到左边界。
1 | func findUnsortedSubarray(nums []int) int { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bishop!
评论
GitalkValine