lintcode-区间最小数-205
2015-09-25 13:59
375 查看
class SegmentTreeNode { public int start, end, min; public SegmentTreeNode left, right; public SegmentTreeNode(int start, int end) { this.start = start; this.end = end; this.min = 0; this.left = this.right = null; } } public class Solution { public SegmentTreeNode build(int start, int end, int[] A) { if(start > end) { return null; } SegmentTreeNode root = new SegmentTreeNode(start, end); if(start != end) { int mid = (start + end) / 2; root.left = build(start, mid, A); root.right = build(mid+1, end, A); root.min = Math.min(root.left.min, root.right.min); } else { root.min = A[start]; } return root; } public int query(SegmentTreeNode root, int start, int end) { if(start <= root.start && root.end <= end) { return root.min; } int mid = (root.start + root.end)/2; if(start>mid) return query(root.right,start,end); else if(mid+1>end) return query(root.left, start, end); else return Math.min(query(root.left,start,mid),query(root.right,mid+1,end)); } public ArrayList<Integer> intervalMinNumber(int[] A, ArrayList<Interval> queries) { SegmentTreeNode root = build(0, A.length - 1, A); ArrayList ans = new ArrayList<Integer>(); for(Interval in : queries) { ans.add(query(root, in.start, in.end)); } return ans; } }
相关文章推荐
- C#:用SqlBulkCopy来实现批量插入数据
- lua和C++相互交换数据
- loopj.android.http.AsyncHttpClient 400
- Android 判断当前线程是否是主线程的两种方法
- ubuntu安装mysqldb
- 广州美国领事馆面签经历
- Linux下必须知道的11个网络命令
- eclipse下搭建SSH整合环境(Struts2+Spring+Hibernate+maven)
- OpenCV 学习(几种基本的低通滤波)
- 为什么要使用onMeasure
- C++笔试题整理
- 文章标题
- OpenCV 学习(几种基本的低通滤波)
- 程序员必备技能与习惯
- 手机如何一键修改运营商的名称跟标识的快捷方法
- APP Resource——Handling Runtime Change
- LeetCode解题报告--Generate Parentheses
- 设置xml以让通知spring 扫描 注解
- 用SDWebImage下载图片、缓存图片到UIImage
- iOS 蓝牙通讯