Description
给定数组arr和整数num,求arr的连续子数组中满足:其最大值减去最小值的结果大于num的个数。请实现一个时间复杂度为O(length(arr))的算法。
Input
输入第一行为测试用例个数。每一个用例有若干行,第一行为数组,每一个数用空格隔开,第二行为num。
Output
输出一个值。
Sample Input 1
1
3 6 4 3 2
2
Sample Output 1
6
使用两个链表,o(n^2)的话会超时,C++一直wrong answer
def compare(nlist, number):
if (len(nlist) == 1):
return "false"
else:
max = nlist[0]
min = nlist[0]
for n in nlist:
if (n > max):
max = n
if (n < min):
min = n
if (max - min > number):
return "true"
else:
return "false"
if __name__ == "__main__":
n = int(input())
for k in range(n):
arr = input()
nlist = [int(n) for n in arr.split()]
number = input()
number = int(number)
count = 0
lenth = len(nlist)
for i in range(lenth):
for j in range(i, lenth):
temp = compare(nlist[i:j + 1], number)
if (temp == "true"):
count = count + 1
print(count)