MergeIntervals
来源:互联网 发布:画图软件有哪些 编辑:程序博客网 时间:2024/06/15 10:10
【题目】
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
对给定的一些列区间进行合并。
我的思路:
1.对每个区间的开始的数进行比较,并且从小到大排序。
2.排序好之后,对相邻的两个区间:
比如【a,b】,【c,d】,比较b , c , d的关系。
语言学的比较渣,用的Java,但是Java有的类和方法不熟,所以有点C语言风格~
package MergeIntervals;public class SortData { public static int []sort_data(int dat[]) { //输入n个数,对第奇数个数从小到大排序 int len=dat.length; int [] sdat=new int[len];//定义一个数组,保存最后merge的结果 int t1,t2; for(int j=0;j<len/2-1;j+=1) //进行len/2-1次循环 { for(int i=0;i<len-3;i+=2) { if(dat[i]>dat[i+2]) { t1=dat[i]; t2=dat[i+1]; dat[i]=dat[i+2]; dat[i+2]=t1; dat[i+1]=dat[i+3]; dat[i+3]=t2; } } } //冒泡排序后得到新的区间排列 //比两个区间相邻数的大小 //将merge之后的新的区间保存在sdat里面。 int j=0; sdat[0]=dat[0]; sdat[1]=dat[1]; for(int i=0;i<len-3;i+=2) { //相邻两个区间【a,b】【c,d】 , b>=c并且b<=d if(sdat[j+1]>=dat[i+2]&&sdat[j+1]<=dat[i+3]) { sdat[j+1]=dat[i+3]; } //相邻两个区间【a,b】【c,d】 , b>=c并且b>d else if(sdat[j+1]>=dat[i+2]&&sdat[j+1]>dat[i+3]) { sdat[j+1]=sdat[j+1]; } //相邻两个区间【a,b】【c,d】 , b<c else { sdat[j+2]=dat[i+2]; sdat[j+3]=dat[i+3]; j+=2; } } return sdat; }}
package MergeIntervals;public class MergeIntervals { public static void main(String[] args) { //输入的区间如果是【a,b】,要满足:a<=b。 int[] k={1,3,2,6,8,10,15,18}; int len=k.length; int[] out=SortData.sort_data(k); for(int i=0;i<len;i+=2) { if(i==0||out[i]!=0)//输出overlap后的结果 { System.out.print("["+out[i]+","+out[i+1]+"]"+" "); } } }}
阅读全文
0 0
- MergeIntervals
- MergeIntervals
- LeetCode No.56 MergeIntervals
- ES6 class与ES5 function区别及联系
- 线程安全、非线程安全,同步、异步
- 最小生成树
- codeforces600E. Lomsat gelral(dsu on tree)
- 控制台日志打印乱码的问题
- MergeIntervals
- stm32F407时钟树
- PDO执行SQL语句的两种方法
- android Messenger
- java学习笔记--关于interface和abstract的一些思考
- Vue学习基础之vue-resource和vue axios
- 【Apollo源码分析】系列的第二部分【perception】
- QT_关于自绘菜单项类QWidgetAction
- zookeeper集群部署后启动报错ZooKeeper JMX enabled by default...解决方案二