能够找到问题的解法与把问题足够简化是天壤之别。比如我知道这题可以用贪心算法来解决,但是代码实现的过程中就走上了复杂的路,但是官方题解给的代码则相当简洁。这说明我思考的不够深入,导致化繁为简的能力不够强。

1. 题目

【LeetCode】452.用最少数量的箭引发气球_代码实现

2. 分析

一道贪心题目。

3. 代码

class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        # 贪心算法        
        points = sorted(points, key = lambda x:x[0])
        print(points)
        idx = 0
        cnt = 0
        prob = idx + 1
        while(idx < len(points) and prob < len(points)):
            left, right = points[idx]            
            while(prob < len(points)):
                next_left, next_right = points[prob]
                # 如果下一个节点满足条件
                if left <= next_left <= right:
                    # 更新
                    left = max(left, next_left)
                    right = min(right, next_right)
                    prob += 1
                else:                
                    # 更新 idx 的值
                    idx = prob
                    cnt+=1 # 计数结果
                    prob += 1
                    break
        if idx < len(points):
            cnt += 1
        return cnt

上面这版代码的看着很复杂。