给定一个二维数组arr[][] ,其中每一行的形式为{start, end} ,表示X轴上每条线段的起点和终点。在一个步骤中,在X轴上选择一个点并删除所有通过该点的线段。任务是找到需要选择的最小数量的点来删除数组的所有线段。
例子:
Input: arr[][]= { {9, 15}, {3, 8}, {1, 6}, {7, 12}, {5,10} }
Output : 2
Explanation:
Select the point arr[2][1](= (6, 0) on the X-axis and delete the second(= arr[1]), third(= arr[2]), and fifth(= arr[4]) line segments.
Select the point arr[3][1](= (12, 0)) on the X-axis and delete the first(=arr[0]) and the fourth(=arr[3]) line segments.
Therefore, the required count is 2.
Input: arr[][]={ {1, 4}, {5, 7}, {9, 13} }
Output: 3
方法:该问题可以使用贪心技术解决。请按照以下步骤解决问题:
- 初始化一个变量,比如cntSteps来计算删除所有线段所需的总步数。
- 根据线段的端点对数组arr[][] 进行排序。
- 初始化一个变量,比如Points = arr[0][1]来存储X轴的点。
- 遍历数组并检查arr[i][0] 的值是否大于Points 。如果发现为真,则将值cntSteps增加1并更新Points = arr[i][1] 的值。
- 最后,打印cntSteps的值。
C++
Java
Python3
输出:
时间复杂度: O(N * log(N))
辅助空间: O(N)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live