http://www.lintcode.com/en/problem/segment-tree-build-ii/\#

因为需要记录下区间最小值,所以思路是先拆分,再从最小的区间计算出大区间。

public SegmentTreeNode build(int[] A) {
        // write your code here
        if (A == null || A.length == 0) {
            return null;
        }

        SegmentTreeNode root = buildHelper(A, 0, A.length - 1);
        return root;
    }


    public SegmentTreeNode buildHelper(int[] A, int start, int end) {
        if (start == end) {
            return new SegmentTreeNode(start, end, A[start]);
        }

        int mid = (start + end) / 2;

        SegmentTreeNode left = buildHelper(A, start, mid);
        SegmentTreeNode right = buildHelper(A, mid + 1, end);

        SegmentTreeNode root = new SegmentTreeNode(left.start, right.end, Math.max(left.max, right.max));
        root.left = left;
        root.right = right;

        return root;

    }

results matching ""

    No results matching ""