diff --git "a/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\350\264\252\345\277\203\347\256\227\346\263\225\344\271\213\345\214\272\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230.md" "b/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\350\264\252\345\277\203\347\256\227\346\263\225\344\271\213\345\214\272\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230.md" index 70e27fc085797e3ba5af090b97e9f30a92f99f4f..8487083a0b6a92bd8b6e7e8d8e624c8db331b193 100644 --- "a/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\350\264\252\345\277\203\347\256\227\346\263\225\344\271\213\345\214\272\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230.md" +++ "b/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\350\264\252\345\277\203\347\256\227\346\263\225\344\271\213\345\214\272\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230.md" @@ -1,4 +1,4 @@ -# 贪心算法之区间调度问题 +# 贪心算法之区间调度问题

@@ -158,4 +158,43 @@ int findMinArrowShots(int[][] intvs) {

-======其他语言代码====== \ No newline at end of file +======其他语言代码====== + +[Edwenc](https://github.com/Edwenc) 提供 第452题的python3 代码: + +```python3 + +class Solution: + def findMinArrowShots(self, points: List[List[int]]) -> int: + ### 思路是把气球的左右坐标看成是区间 + ### 用最少数量的箭 相当于 找不重叠区间的个数 + ### 因为重叠的区间 用一支箭就可以全部引爆气球 + + # 首先获得区间的个数 为0的话就不用移除 + n = len(points) + if n==0: + return 0 + + # 按照每个区间的右端点值进行排序 + sorted_point = sorted( points , key=lambda x: x[1] ) + + # 不重叠区间个数至少是1 + res = 1 + + # end是所有不重叠的区间中 最大的右端点 + # end的初始值即是sorted_list[0]的右端点 + end = sorted_point[0][1] + + # 从序号1开始往后找 + for i in range(1,n): + # start是当前区间左端点值 + start = sorted_point[i][0] + # 如果当前左端点比最大右端点都严格大了 + # 说明两区间严格不重叠 count+1 再更新end + if start > end: + res += 1 + end = sorted_point[i][1] + + return res + +``` \ No newline at end of file