gpt4 book ai didi

python - 线段树的最小值和最大值

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:40 25 4
gpt4 key购买 nike

我正在尝试构建一个线段树,其父节点应包含其子节点的最小值和最大值。现在,当我尝试实现这一点时,我遇到了一个错误,即一个子节点可以返回一个整数,而另一个子节点可以返回一个列表,操作 max 或 min 函数会引发错误。如何克服这个问题?

from math import log2,ceil
def segment(low,high,pos):

if (low==high):
segment_tree[pos]=arr[low]
return

mid=(high+low)//2

segment(low,mid,2*pos+1)
segment(mid+1,high,2*pos+2)

segment_tree[pos]=[min(segment_tree[2*pos+1],segment_tree[2*pos+2]),max(segment_tree[2*pos+1],segment_tree[2*pos+2])]

length=5
arr=[1,2,3,4,5]
low=0
high=length-1
height=int(ceil(log2(length)))
pos=0
size_of_segment_tree=2*int(pow(2,height))-1
segment_tree=[0]*size_of_segment_tree
segment(low,high,pos)

最佳答案

这将使用 isinstance(object, list) 工作

segment_tree[pos]=[min(min(segment_tree[2*pos+1]) if isinstance(segment_tree[2*pos+1],list) else segment_tree[2*pos+1],min(segment_tree[2*pos+2]) if isinstance(segment_tree[2*pos+2],list) else segment_tree[2*pos+2]),max(max(segment_tree[2*pos+1]) if isinstance(segment_tree[2*pos+1],list) else segment_tree[2*pos+1],max(segment_tree[2*pos+2]) if isinstance(segment_tree[2*pos+2],list) else segment_tree[2*pos+2])]

编辑:为清楚起见重新格式化:

segment_tree[pos]=  [
min(min(segment_tree[2*pos+1])
if isinstance(segment_tree[2*pos+1],list)
else segment_tree[2*pos+1],
min(segment_tree[2*pos+2])
if isinstance(segment_tree[2*pos+2],list)
else segment_tree[2*pos+2]),
max(max(segment_tree[2*pos+1])
if isinstance(segment_tree[2*pos+1],list)
else segment_tree[2*pos+1],
max(segment_tree[2*pos+2])
if isinstance(segment_tree[2*pos+2],list)
else segment_tree[2*pos+2])
]

关于python - 线段树的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com