leetcode 56合并区间 java
//先排序,将左区间小的放在前面,然后如果前一个的右区间大于下一个的左区间,则可以合并,分别用两个下标指向当前的大区间和将要考察的小区间
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length<=1)
return intervals;
quickSort(intervals,0,intervals.length-1);
int j=0;
for(int i=0;i<intervals.length;i++)
{
if(intervals[j][1]>=intervals[i][0])
{
intervals[j][1]=Math.max(intervals[j][1],intervals[i][1]);
}
else
{
j++;
intervals[j][0]=intervals[i][0];
intervals[j][1]=intervals[i][1];
}
}
int[][] res = Arrays.copyOfRange(intervals, 0, j+1);
return res;
}
public void quickSort(int[][] arr,int l,int r)
{
if(l>=r)
return ;
int p=partition(arr,l,r); //执行partition操作将数组分成两份
quickSort(arr,l,p-1);
quickSort(arr,p+1,r);
}
public int partition(int[][] arr,int l,int r)
{
int v=arr[l][0];
int i=l; //[l-i]为左半部分 初始为0,小于i的部分包括i
for(int k=l+1;k<=r;k++)
{
if(arr[k][0]<v)
{
swap(arr,k,i+1);
i++;
}
}
swap(arr,l,i);
return i;
}
public void swap(int[][] arr,int i,int j)
{
int temp=arr[i][0];
arr[i][0]=arr[j][0];
arr[j][0]=temp;
int y=arr[i][1];
arr[i][1]=arr[j][1];
arr[j][1]=y;
}
}
最新文章
- MVC5 网站开发之四 业务逻辑层的架构和基本功能
- 盘点销售一体机 打印POS一体的设备。 打印,盘点,销售PDA(手持终端)+移动销售POS软件
- VM虚拟主机怎么设置网络
- bootstraps字体图标无法显示
- 国内大学毕业论文 LaTeX 模板集合
- SQL注入技术专题—由浅入深【精华聚合贴】
- 1.2 中国象棋将帅问题进一步讨论与扩展:如何用1个变量实现N重循环?[chinese chess]
- netbios wins dns LLMNR
- jquery ajax发送delete(use in jquery file upload delete file)
- EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
- Asp.Net中的session配置
- 数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找
- sql关键词的执行顺序
- php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
- 使用Atlas进行元数据管理之Glossary(术语)
- 汇编语言 实验14 访问CMOS RAM
- java中的抽象类的作用
- C# TTS 文字和英文
- 自学git心得-5
- PowerDesigner表设计转化为excel或者markdown