无序数组中找一个比左边都大、右边都小的数

人生第一面 字节跳动

问的这个题

头脑混乱当时没做出来 今天写了

面试题:在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数 返回下标

思路:开数组遍历数组,保存当前最小值最大值;然后第二遍遍历的时候直接判断这个数啊是不是比左边最大值大、右边最小值都小就行

def find_the_n(L):
    n = len(L)
    flag1=[0 for i in range(n)]
    flag2=[0 for i in range(n)]
    res=[]

    min_,max_=L[-1],L[0]
    for i in range(n):
        if L[i]>=max_:
            max_=L[i]
        if L[n-i-1]<=min_:
            min_=L[n-i-1]
        flag1[i]=max_
        flag2[n-i-1]=min_
    for i in range(n):
        if L[i]>=flag1[i] and L[i]<=flag2[i]:
            res.append(L[i])

    return res

list1=[21, 11, 45, 56, 9, 66, 77, 89, 78, 68, 100, 120, 111]

print(find_the_n(list1))

 

posted @ 2021-09-17 12:21  -DP-  阅读(523)  评论(0编辑  收藏  举报