寻找局部最高点-python实现(迭代+递归)

题目:寻找局部最高点-python实现
列表:array[1,7,6,5,3,7,4],找出任意一个局部最高点
且array[-1] = array[n] = 负无穷
方法:
从中间位置开始 middle = middle = int((min + max) / 2)
有三种情况:
1.中间为局部最高点: self.array[middle-1]<self.array[middle] and self.array[middle]>self.array[middle+1]
2.左边为局部最高点:self.array[middle]>=self.array[middle+1]
3.右边为局部最高点:self.array[middle] <= self.array[middle+1]

#迭代方式

class fing_Hpoint_part:
    def __init__(self):
        self.array = [1,7,6,5,3,7,4]

    def fun(self):
        min = 0
        max =len(self.array)-1
        while True:
            middle = int((min + max) / 2)
            print("middle",middle)
            if self.array[middle-1]<self.array[middle] and self.array[middle]>self.array[middle+1]:
                return self.array[middle]
            if self.array[middle]>=self.array[middle+1]:
                max = middle
            if self.array[middle] <= self.array[middle+1]:
                min = middle
            if middle - 1 < 0:
                return self.array[0]
            if middle + 1 >len(self.array)-1:
                return len(self.array[len(self.array)-1])


#主函数
if __name__ == '__main__':
    arg = fing_Hpoint_part()
    a=arg.fun()
    print(a)

#递归实现

#输入一个数组,求一个极大值,采用递归算法
#寻找局部最高点-1D
class fing_Hpoint_part:
    def fun(self,input,min,max):
        middle = int((min + max) / 2)
        print("middle",middle)
        if middle - 1 < 0:
            return input[0],0
        if middle + 1 > len(input) - 1:
            return input[len(input)-1],len(input)-1
        if input[middle-1]<input[middle] and input[middle]>input[middle+1]:
            print(middle)
            print(input[middle])
            return input[middle],middle
        if input[middle]>=input[middle+1]:
            max =  middle-1
            return self.fun(input,min,max)
        if input[middle] <= input[middle+1]:
            print("here")
            min = middle+1
            return self.fun(input,min,max)

#寻找局部最高点-2D
class towD:
    def findTowD(self, input):
        fing_Hpoint_part.fun(self, input)


if __name__ == '__main__':
    arg = fing_Hpoint_part()
    a = [1,7,6,3,7,8,4]
    b = arg.fun(a,0,len(a)-1)
    print(b)





发布了23 篇原创文章 · 获赞 9 · 访问量 4216

猜你喜欢

转载自blog.csdn.net/qq1225598165/article/details/100738507