[编程之美]区间重合判断
来源:互联网 发布:服装设计打版软件 编辑:程序博客网 时间:2024/05/11 23:20
编程之美2.19,在网上看见很多答案但是并没有看见java版本的,所以自己写一个。
问题描述:
给定一个源区间[x, y] (y>=x)和N个无序的目标区间[x1,y1],[x2,y2],[x3,y3],……[xN,yN],判断源区间[x,y]是不是在目标区间内?
例如给定源区间[1,6]和一组无序的目标区间[2,3],[1,2],[2,9],[3,4],即可认为区间[1,6]在区间[2,3],[1,2],[2,9],[3,4]内。
解法:
- 先对区间进行排序,这里自己定义了一个比较器,利用Arrays.sort排序。O(nlogn)
- 合并重合的区间,确定合并后区间的个数。O(n)
- 二分查找目标数组,如果在同一个区间,则说明存在重合。O(logn)
下面是代码
static class numsComparator implements Comparator<int[]>{ @Override public int compare(int[] arg0, int[] arg1) { return (arg0[0]<arg1[0]? -1: (arg0[0]==arg1[0]? 0: 1)); } } private static int lineMerge(int[][] nums){ int len=0; int low=nums[0][0]; int high=nums[0][1]; for(int i=1; i<nums.length; i++){ if(nums[i][0]<=high){ high=Math.max(high, nums[i][1]); }else{ nums[len][0]=low; nums[len][1]=high; len++; low=nums[i][0]; high=nums[i][1]; } } nums[len][0]=low; nums[len][1]=high; return ++len; } private static int binarySearch(int[][] nums, int len, int target){ int i=0; int j=len-1; while(i<=j){ int mid=(i+j)>>>1; if(nums[mid][0]<=target&&nums[mid][1]>=target){ return mid; }else if(nums[mid][1]<target){ i=mid+1; }else{ j=mid-1; } } return -1; } public static boolean linesCover(int[][] nums, int[] target){ //step1: 按区间低位进行排序 Arrays.sort(nums, new numsComparator() ); System.out.println(Arrays.deepToString(nums)); //step2: 合并区间,新的区间个数为len int len=lineMerge(nums); for(int i=0; i<len; i++){ System.out.println(Arrays.toString(nums[i])); } //step3: 二分查找 int i=binarySearch(nums, len, target[0]); int j=binarySearch(nums, len, target[1]); //在同一区间且不为-1 return (i!=-1&&i==j); } public static void main(String[] args) { int[][] nums2={{2, 3}, {1, 2}, {3, 9}, {12, 15}, {4, 5}}; int[] nums3={1, 6}; System.out.println(linesCover(nums2, nums3)); }
测试用例比较少,不知道是否有疏漏,欢迎指正。
0 0
- 编程之美-区间重合判断
- 《编程之美》 2.19 区间重合判断
- 编程之美 2.19 区间重合判断
- 【编程之美】区间重合判断
- 编程之美2.19区间重合判断
- 编程之美区间重合判断
- 区间重合判断-编程之美2.19
- 【编程之美】区间重合判断
- 编程之美 2.19 区间重合判断
- 编程之美区间重合判断
- [编程之美]区间重合判断
- 编程之美 - 区间重合判断
- 读书笔记之编程之美 - 2.19 区间重合判断
- 【编程之美】区间重合判断(线段树)
- 编程之美——2.19 区间重合判断
- 区间重合判断(编程之美2.19)
- 编程之美--区间重合判断
- 编程之美——区间重合判断
- javascript参数传递
- 解决安装sql server 2000 无法验证产品密钥的问题
- HTTP Status 405 - HTTP method POST is not supported by this URL
- USACO The Castle
- scala 反射生成对象方法
- [编程之美]区间重合判断
- 入门视频采集与处理(学会分析YUV数据)
- Shell脚本自动Telnet并执行远端机器的脚本
- java多线程--join函数
- Ceph集群配置
- ruby使用Net::SSH和Net::SCP,实现远程命令执行
- Hibernate 关系映射--多对一、一对多总结篇
- RecycleView 分割线设置及监听滚动状态
- mysql时间相关函数总结