欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

笔试编程题汇总(5)

程序员文章站 2024-03-19 22:11:16
...
"""
对于输入A,如果A[i-1]>A[i]<A[i+1]则说这是一个山谷
输入:数组A
输出:最大的山谷的长度


样例:
    输入:
        [4,2,3,4,3,1,2,3]
    输出:
        5
"""

"""
基本思想:
    遍历数组A,而且只遍历一遍,记录最大的山谷长度,时间复杂度是O(n)
"""



import sys

def findValleyLen(A):
    valley_left = []
    valley_right = []
    len_max = 0
    
    for idx in range(len(A)):
        if len(valley_left)==0:
            valley_left.append(A[idx])
        else:
            if len(valley_right)==0:#left
                if A[idx]<valley_left[-1]:
                    valley_left.append(A[idx])
                elif A[idx]>valley_left[-1]:
                    if len(valley_left)>=2:
                        valley_right.append(A[idx])
                    else:
                        valley_left=[]
                        valley_left.append(A[idx])
                else:#equal
                    valley_left=[]
                    valley_left.append(A[idx])
            else:#right
                if A[idx]>valley_right[-1]:
                    valley_right.append(A[idx])
                elif A[idx]<=valley_right[-1]:
                    len_this = len(valley_left)+len(valley_right)
                    if len_this>len_max:
                        len_max=len_this
                        #valley = valley_left+valley_right
                    valley_left=[]
                    valley_left.append(valley_right[-1])
                    valley_left.append(A[idx])
                    valley_right=[]
                else:#equal
                    pass

    #the last one
    if len(valley_right)>0:
        len_this = len(valley_left)+len(valley_right)
        if len_this>len_max:
            len_max=len_this
            #valley = valley_left+valley_right
    
    return len_max if len_max>=3 else 0# valley
    

if __name__=="__main__":
    line = sys.stdin.readline().strip()
    if len(line)<3:
        print(0)
    else:
        line = line[1:-1]
        value = map(int, line.split(','))
        A = list(value)
        print(findValleyLen(A))