|
发表于 2020-4-15 17:17:47
|
显示全部楼层
难度评级:简单
要素分析:对比
代码:- def solve(lst:'list of int',how:bool=False)->int:
- if not lst:
- raise ValueError('empty lst')
- le = len(lst)
- b,s = [lst[0]]*2
- l,r = 0,0
- for i in range(le-1):
- if lst[i]>lst[i+1]:
- b,s = [lst[i]]*2
- l,r = i,i
- break
- for i in range(l,le):
- n = lst[i]
- if n > b:b = n
- elif n < b:r = i
- if n < s:
- s = n
- for j in range(l,0,-1):
- if lst[j] < n:
- l = j+1
- break
- else:l = 0
- if how:print(lst[l+1:r+1])
- return r-l
- if __name__ == '__main__':
- print('示例1 输出:',solve([2, 6, 4, 8, 10, 9, 15],1))
复制代码 当输入列表已经是完全升序的时候没有任何一个子数组需要排列,最短为空组,没问题吧?
思路解说:
需要排序的连续子组有着特性:
1. 左右两端外一定是升序
2. 子组的最小值大于左边的最大值,子组的最大值小于右边的最小值
按照特性寻找即可
|
评分
-
查看全部评分
|