題目:尋找局部最高點-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)