给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
示例 1:
输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
说明 :
输入的数组长度范围在 [1, 10,000]。
输入的数组可能包含重复元素 ,所以升序的意思是<=。
思路:
将数组排序,对比,采用双指针的方法,分别记录起始和结尾不同元素的位置,相减+1就是长度
特例:1 2 3 4 start end 没改变,就为0,因为有加1操作
2 1 ,数组下标0开始,所以start end初始值用-1
# -*- coding: utf-8 -*-
class Solution:
def findUnsortedSubarray(self, nums):
befor_nums = nums.copy()
nums.sort()
start,end = -1,-1
for i in range(len(nums)):
if nums[i] != befor_nums[i] and start == -1:
start = i
for i in range(len(nums)-1,0,-1):
if nums[i] != befor_nums[i] and end == -1:
end = i
res = end - start + 1
if start == -1 and end==-1:
res = 0
return res
if __name__ == "__main__":
s = Solution()
nums = list(map(int,input().split()))
print(s.findUnsortedSubarray(nums))