《算法设计与分析(Python)》课程作业01——寻找局部最高点、栈

用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]))

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值