最大最小值

小易给定了一个长度为n的数字序列,对于每一个1<=k<=n,小易希望能求解出所有长度为k的连续子序列的最大值中的最小值。

输入描述:
第一行数字n
接下来一行是一个长度为n的数字序列
1<=n<=100000,0<=ai<=109

输出描述:
一行n个数字,第i个数字表示k = i时的答案。

输入例子1:
6
1 3 2 4 6 5

输出例子1:
1 3 3 4 6 6

例子说明1:
当k = 2的时候
子序列分别是:
1 3 最大值为 3
3 2 最大值为 3
2 4 最大值为 4
4 6 最大值为 6
6 5 最大值为 6
所有最大值中的最小值为3

 

参考1:

直接法

n = int(input())
num = list(map(int,input().split()))
k = 1
while k <= n:
    res = []
    for i in range(n):
        a = max(num[i:i+k])
        res.append(a)
        if i+k>=n:
            break
    print(int(min(res)), end = ' ')
    k += 1

您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为30.00%

 

参考2:

加入break

n = int(input())
num = list(map(int,input().split()))
k = 1
m = max(num)
p = m
while k <= n:
    res = []
    b = m
    for i in range(n):
        a = max(num[i:i+k])
        b = min(a,b) 
        if b == p:
            break
        if i+k>=n:
            break
    p = b #当下标记
    print(b, end=' ')
    k += 1

您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为60.00%

posted @ 2020-08-13 23:03  Andy_George  阅读(306)  评论(0编辑  收藏  举报