题目:寻找局部最高点-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)