国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[LintCode] Segment Tree Modify

CoffeX / 2643人閱讀

摘要:和其它題目一樣,依然是遞歸的做法。注意若樹的結(jié)點(diǎn)范圍為,那么至少有個(gè)數(shù)在左子樹上,所以語句里用了號。另外,最后一句是調(diào)用遞歸之后的結(jié)果,必須寫在最后面。

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.

Example

For 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其它題目一樣,依然是遞歸的做法。注意:若樹的結(jié)點(diǎn)范圍為0~n,那么至少有n/2個(gè)數(shù)在左子樹上,所以if語句里用了<=號。另外,最后一句root.max = Math.max(root.left.max, root.right.max)是調(diào)用遞歸之后的結(jié)果,必須寫在最后面。

Solution
public 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);
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66194.html

相關(guān)文章

  • [LintCode] Segment Tree Build & Segment Tree B

    摘要:唯一需要注意的就是的賦值取左右子樹的的較大值,最后一層的獨(dú)立結(jié)點(diǎn)的為對應(yīng)數(shù)組中的值。 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...

    honhon 評論0 收藏0
  • [LintCode] Segment Tree Query I & Segment Tree

    摘要:題目是要查詢到這個(gè)區(qū)間內(nèi)某一點(diǎn)的。值是從最底層的子節(jié)點(diǎn)值里取最大值。因此,不用太復(fù)雜,遞歸就可以了。與所不同的是,對所給區(qū)間內(nèi)的元素個(gè)數(shù)求和,而非篩選。這樣就會出現(xiàn)的情況,視作本身處理。 Segment Tree Query Problem For an integer array (index from 0 to n-1, where n is the size of this ar...

    vibiu 評論0 收藏0
  • [LintCode] Interval Minimum Number

    摘要:這道題目是篩選出數(shù)組中的最小值,存入新數(shù)組。因此,聯(lián)想到和系列的題目,對于的處理,使用線段樹是非常有效的方法。之前我們創(chuàng)建的線段樹,有和兩個(gè)。參照這個(gè)參數(shù),可以考慮在這道題增加一個(gè)的參數(shù),代表每個(gè)結(jié)點(diǎn)的最小值。 Problem Given an integer array (index from 0 to n-1, where n is the size of this array),...

    taowen 評論0 收藏0
  • [LintCode] Simplify Path [字符串操作]

    摘要:,可以用函數(shù)去掉所有,然后多考慮一個(gè)中間為空的。關(guān)于語句的一個(gè)特點(diǎn)我們對和其實(shí)都是不做操作,然而,兩個(gè)可以都,但是不能都不做操作。像這樣這樣這兩個(gè)就都會等價(jià)于下一個(gè)就會出錯(cuò)。 Problem Given an absolute path for a file (Unix-style), simplify it. Example /home/, => /home //去掉末尾的slash...

    leanxi 評論0 收藏0
  • LintCode: Max Tree

    摘要:題目此題和很類似,所以第一反應(yīng)使用遞歸做。遞歸的解法過不了,會顯示超時(shí)比遞歸的更好的方法是用,比較難想到,代碼參考了思路是用一個(gè)單調(diào)遞減棧尋找最大值。這個(gè)操作可以幫我們順利找到左子樹和父節(jié)點(diǎn)。 題目 Given an integer array with no duplicates. A max tree building on this array is defined as fol...

    ivan_qhz 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<