一、题目
二、代码
class Solution
{
public int findMinArrowShots(int[][] points)
{
int i;
Arrays.sort(points,(a,b)->
{
if(a[0]==b[0])
{
// System.out.println("非正常排序");
return Integer.compare(a[1], b[1]);
}
// System.out.println("正常排序");
return Integer.compare(a[0], b[0]);
});
// for(int[] po :points)
// {
// System.out.println(" "+po[0]+" "+po[1]);
// }
int sum = 1;
int begin = points[0][0];
int end = points[0][1];
for(int[] po: points)
{
// System.out.println(" ");
// System.out.println(" begin "+begin+" end "+end);
// System.out.println(" "+po[0]+" "+po[1]);
if(po[0]>end)
{
// System.out.println(" 新的开端 ");
begin = po[0];
end = po[1];
sum = sum+1;
}
else
{
begin = Math.max(begin,po[0]);
end = Math.min(end,po[1]);
// System.out.println(" 修改begin "+begin);
}
}
return sum;
}
}
三、运行结果
四、附录
二刷
class Solution
{
public int findMinArrowShots(int[][] points)
{
Arrays.sort(points,(a,b)->
{
if(a[0] == b[0]) return Integer.compare(a[1],b[1]);
return Integer.compare(a[0],b[0]);
}
);
int i;
int length = points.length;
// for(i=0;i<length;i++)
// {
// System.out.print(" i "+points[i][0]);
// System.out.println(" "+points[i][1]);
// }
int res = 1;
int begin = points[0][0];
int end = points[0][1];
for(i=1;i<length;i++)
{
if( points[i][0] <= end )
{
end = Math.min(end,points[i][1]);
}
else
{
begin = points[i][0];
end = points[i][1];
res++;
}
}
return res;
}
}