用Python实现一个简单的栈
class Stack(object):
# 构造方法初始化空栈
def __init__(self):
self.stack = list()
def is_empty(self):
return len(self.stack) <= 0
# 取栈顶元素
def top(self):
return None if self.is_empty() else self.stack[-1]
# 进栈
def push(self, item):
self.stack.append(item)
# 出栈
def pop(self):
return None if self.is_empty() else self.stack.pop(-1)
class关键字用来声明一个类,后面跟类名,这里是Stack,翻译过来就是栈,__init__(self)是类的构造方法,用于初始化类的实例对象。本例在构造方法中初始化一个list对象赋值给self.stack。
其中以self为第一个参数的方法均称为类的成员方法,又叫做类的行为,因为方法代表着做某件具体的事情;在构造方法中初始化的变量称为成员变量,又叫类的属性。
is_empty(self)方法用于判断栈是否为空,len(self.stack)返回self.stack的长度,显然当长度<=0则代表栈为空
top(self)方法用于取栈顶元素,这并不等同于将栈顶元素弹出栈,只是查看栈顶元素值。
push(self, item)方法用于将item放入栈顶。
pop(self)方法用于将栈顶元素弹出,并返回之。
寻找局部最高点
def find_local_highest_point(sequence):
size = len(sequence)
mid = size // 2
if size == 0:
return None
# 长度不大于3直接返回最大值
if size <= 3:
return max(sequence)
# 长度大于3则使用二分法寻找
# 如果中点为局部最高点则直接返回中点的值
if sequence[mid - 1] <= sequence[mid] >= sequence[mid + 1]:
return sequence[mid]
# 如果A[mid-1] > A[mid],则在前半部分序列中找
if sequence[mid - 1] > sequence[mid]:
return find_local_highest_point(sequence[0: mid + 1])
# 如果A[mid+1] > A[mid],则在后半部分序列中找
if sequence[mid + 1] > sequence[mid]:
return find_local_highest_point(sequence[mid: size])
if __name__ == '__main__':
print(find_local_highest_point([1, 2, 3, 4, 5, 2]))