对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
测试样例:
[1,5,3,4,2,6,7],7
返回:4
# -*- coding:utf-8 -*- class ShortSubsequence: def findShortest(self, A, n): # write code here list1=A list1=sorted(list1) re=[] for i in range(n): if list1[i]!=A[i]: re.append(i) if len(re)!=0: return max(re)-min(re)+1 else: return 0 找到与排好序的列表的不同的段,用最后的减去最前的位置加一就行了
# -*- coding:utf-8 -*- class ShortSubsequence: def findShortest(self, A, n): start, end = 0, n-1#用两个指针一个在头一个在尾 while min(A[start + 1:]) >= A[start]:#先判断头指针与A[start+1:]的最小值比较,然后不断后移直到A[start] 比 A[start+1:]中最小的还要大就停止 start += 1 if start >= n-1: return 0 while A[end] >= max(A[start:end]):#然后尾指针开始移动不断用A[end] 与A[start:end]中的最大值比较 end -= 1 return end-start+1#最后用j-i+1就是中间需要排序的大小
class ShortSubsequence: def findShortest(self, A, n): i, j = 0, n-1 while min(A[i + 1:]) >= A[i]: i += 1 if i >= n-1: return 0 while A[j] >= max(A[i:j]): j -= 1 return j-i+1
class ShortSubsequence:
def findShortest(self, A, n):
B, start, end, canEnd = sorted(A), 0, -1, False
for i, v in enumerate(A):
if v != B[i]:
if not canEnd:
start = i
canEnd = True
else:
end = i
return end - start + 1