您的位置:首页 > 其它

LintCode:区间最小数

2016-08-11 00:06 295 查看
LintCode:区间最小数

"""
Definition of Interval.
class Interval(object):
def __init__(self, start, end):
self.start = start
self.end = end
"""

class Solution:
"""
@param A, queries: Given an integer array and an Interval list
The ith query is [queries[i-1].start, queries[i-1].end]
@return: The result list
"""
def intervalMinNumber(self, A, queries):
# write your code here
if A == []:
return
ans = []
n = len(A) - 1
root = SegmentTreeNode(0, n, min(A))
self.build_segment_tree(root, 0, n, A)
for interval in queries:
res = self.query(root, interval.start, interval.end)
ans.append(res)
return ans

def build_segment_tree(self, root, start, end, A):
if start == end:
return
left_start = start
left_end = (start + end) / 2
left_node = SegmentTreeNode(left_start, left_end, min(A[left_start : left_end+1]))

right_start = (start + end) / 2 + 1
right_end = end
right_node = SegmentTreeNode(right_start, right_end, min(A[right_start:right_end+1]))

root.left = left_node
root.right = right_node

self.build_segment_tree(root.left, left_start, left_end, A)
self.build_segment_tree(root.right, right_start, right_end, A)

def query(self, root, start, end):
if start > root.end or end < root.start:
return 99999
if start <= root.start and end >= root.end:
return root.max
return min(self.query(root.left, start, end), self.query(root.right, start, end))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: