分金块问题——python实现

python实现分金块问题 分治算法 递归

def min(x, y):
    if x > y:
        return y
    else:
        return x

def max(x, y):
    if x < y:
        return y
    else:
        return x

def search_min(list, left, right):  #left为左边的索引,right为右边的索引
    if left == right or right - left == 1:
        return min(list[left],list[right])
    else:
        mid = (left + right) // 2
        list[left] = search_min(list, left, mid)
        list[right] = search_min(list, mid, right)
        return min(list[left],list[right])

def search_max(list, left, right):
    if left == right or right - left == 1:
        return max(list[left],list[right])
    else:
        mid = (left + right) // 2
        list[left] = search_max(list, left, mid)
        list[right] = search_max(list, mid+1, right)
        return max(list[left],list[right])

list = [2,5,98,20,50,14]
list1 = list.copy()
left = 0
right = len(list) - 1
print(search_min(list,left,right))
print(list)
print(search_max(list1,left,right))

输出结果

在这里插入图片描述
执行print(search_min(list,left,right))之后,原list已经变了,可以看到输出的是[2,5,5,20,50,5],如果此时执行search_max(list,left,right)(注意是list),输出结果则并不是98,而是50,所以我这里用了一个list1 = list.copy()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值