摘要:和其它題目一樣,依然是遞歸的做法。注意若樹的結點范圍為,那么至少有個數在左子樹上,所以語句里用了號。另外,最后一句是調用遞歸之后的結果,必須寫在最后面。
Problem
For a Maximum Segment Tree, which each node has an extra value max to store the maximum value in this node"s interval.
Implement a modify function with three parameter root, index and value to change the node"s value with [start, end] = [index, index] to the new given value. Make sure after this change, every node in segment tree still has the max attribute with the correct value.
ExampleFor segment tree:
[1, 4, max=3] / [1, 2, max=2] [3, 4, max=3] / / [1, 1, max=2], [2, 2, max=1], [3, 3, max=0], [4, 4, max=3]
if call modify(root, 2, 4), we can get:
[1, 4, max=4] / [1, 2, max=4] [3, 4, max=3] / / [1, 1, max=2], [2, 2, max=4], [3, 3, max=0], [4, 4, max=3]
or call modify(root, 4, 0), we can get:
[1, 4, max=2] / [1, 2, max=2] [3, 4, max=0] / / [1, 1, max=2], [2, 2, max=1], [3, 3, max=0], [4, 4, max=0]Challenge
Do it in O(h) time, h is the height of the segment tree.
Note和segment tree其它題目一樣,依然是遞歸的做法。注意:若樹的結點范圍為0~n,那么至少有n/2個數在左子樹上,所以if語句里用了<=號。另外,最后一句root.max = Math.max(root.left.max, root.right.max)是調用遞歸之后的結果,必須寫在最后面。
Solutionpublic class Solution { public void modify(SegmentTreeNode root, int index, int value) { if (index > root.end || index < root.start) return; if (root.start == root.end) { root.max = value; return; } if (index <= (root.start + root.end) / 2) modify(root.left, index, value); else modify(root.right, index, value); root.max = Math.max(root.left.max, root.right.max); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66194.html
摘要:唯一需要注意的就是的賦值取左右子樹的的較大值,最后一層的獨立結點的為對應數組中的值。 Segment Tree Build I Problem The structure of Segment Tree is a binary tree which each node has two attributes start and end denote an segment / interv...
摘要:題目是要查詢到這個區間內某一點的。值是從最底層的子節點值里取最大值。因此,不用太復雜,遞歸就可以了。與所不同的是,對所給區間內的元素個數求和,而非篩選。這樣就會出現的情況,視作本身處理。 Segment Tree Query Problem For an integer array (index from 0 to n-1, where n is the size of this ar...
摘要:這道題目是篩選出數組中的最小值,存入新數組。因此,聯想到和系列的題目,對于的處理,使用線段樹是非常有效的方法。之前我們創建的線段樹,有和兩個。參照這個參數,可以考慮在這道題增加一個的參數,代表每個結點的最小值。 Problem Given an integer array (index from 0 to n-1, where n is the size of this array),...
摘要:,可以用函數去掉所有,然后多考慮一個中間為空的。關于語句的一個特點我們對和其實都是不做操作,然而,兩個可以都,但是不能都不做操作。像這樣這樣這兩個就都會等價于下一個就會出錯。 Problem Given an absolute path for a file (Unix-style), simplify it. Example /home/, => /home //去掉末尾的slash...
摘要:題目此題和很類似,所以第一反應使用遞歸做。遞歸的解法過不了,會顯示超時比遞歸的更好的方法是用,比較難想到,代碼參考了思路是用一個單調遞減棧尋找最大值。這個操作可以幫我們順利找到左子樹和父節點。 題目 Given an integer array with no duplicates. A max tree building on this array is defined as fol...
閱讀 1884·2021-11-17 09:33
閱讀 6470·2021-10-12 10:20
閱讀 2299·2021-09-22 15:50
閱讀 1784·2021-09-22 15:10
閱讀 615·2021-09-10 10:51
閱讀 618·2021-09-10 10:50
閱讀 3021·2021-08-11 11:19
閱讀 1776·2019-08-30 15:55