筆試編程題彙總(5)

"""
對於輸入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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章