*[Lintcode]Interval Sum区间最小数
来源:互联网 发布:阿里云栖大会地址 编辑:程序博客网 时间:2024/05/22 07:55
Given an integer array (index from 0 to n-1, where n is the size of this array), and an query list. Each query has two integers [start, end]
. For each query, calculate the sum number between index start and end in the given array, return the result list.
Notice
We suggest you finish problem Segment Tree Build, Segment Tree Query andSegment Tree Modify first.
For array [1,2,7,8,5]
, and queries [(0,4),(1,2),(2,4)]
, return [23,9,20]
使用区间树解决。注意interval各有一部分处于root左侧和右侧的问题。
/** * Definition of Interval: * public classs Interval { * int start, end; * Interval(int start, int end) { * this.start = start; * this.end = end; * } */public class Solution { /** *@param A, queries: Given an integer array and an query list *@return: The result list */ public ArrayList<Long> intervalSum(int[] A, ArrayList<Interval> queries) { // write your code here SegmentTreeNode node = build(A, 0, A.length - 1); ArrayList<Long> res = new ArrayList<Long>(); for(Interval i : queries) { res.add(find(node, i)); } return res; } private Long find(SegmentTreeNode root, Interval i) { if(root == null) return 0L; if(i.start > root.end || i.end < root.start) return 0L; if(i.start <= root.start && i.end >= root.end) { return root.sum; } else { //should caculate separately to deal with separate interval problem Long left = find(root.left, i); Long right = find(root.right, i); return left + right; } } private SegmentTreeNode build(int[] A, int start, int end) { if(start > end) return null; SegmentTreeNode root = new SegmentTreeNode(start, end); if(start == end) {root.sum = (long)A[start]; return root;} root.left = build(A, start, (start + end) / 2); root.right = build(A, (start + end) / 2 + 1, end); root.sum = root.left.sum + root.right.sum; return root; } class SegmentTreeNode { SegmentTreeNode left; SegmentTreeNode right; int start, end; Long sum; public SegmentTreeNode(int start, int end) { this.start = start; this.end = end; } }}
0 0
- *[Lintcode]Interval Sum区间最小数
- *[Lintcode]Interval Minimum Number 区间最小数
- LintCode:区间最小数
- 区间最小数-LintCode
- [Lintcode]Interval Sum II区间求和 II
- lintcode-区间最小数-205
- lintcode(205)区间最小数
- lintcode Interval Sum
- 205.Interval Minimum Number-区间最小数(中等题)
- 题目:区间最小数
- 区间最小数
- 206.Interval Sum-区间求和 I(中等题)
- lintcode minimum-path-sum 最小路径和
- *[Lintcode]Two Sum 两数之和
- lintcode 两数之和(Two Sum )(Java)
- [LintCode]Insert Interval
- LintCode 30:Insert Interval
- Insert Interval 插入区间
- 京东评价系统海量数据存储设计
- C# 二进制BinaryFormatter进行序列化与反序列化
- Spring @Configuration用annotation装配spring
- 策略模式——对象行为型模式
- 潮流十年,初心未变
- *[Lintcode]Interval Sum区间最小数
- 如何使用爬虫采集搜狐汽车新车资讯
- Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradl
- oracle 11G 执行计划管理
- mybatis常用jdbcType数据类型
- mysql权限
- HTML5 为何要引入Canvas?
- codewars 一个很神奇的网站
- 微信公众号Unauthorized API function