---
# System prepended metadata

title: 1326. Minimum Number of Taps to Open to Water a Garden
tags: [Leetcode, Intervals, Medium, Greedy]

---

# 1326. Minimum Number of Taps to Open to Water a Garden
###### tags: `Leetcode` `Medium` `Greedy` `Intervals`
Link: https://leetcode.com/problems/minimum-number-of-taps-to-open-to-water-a-garden/description/
## 思路
和[1024. Video Stitching](https://hackmd.io/DLEdtqZQTC-_GZZbrfkRrg)很像
注意无解的情况有三种：
1. 最右端的位置还没有推进到n，但是区间i之后已经没有任何其他区间能与之重叠
2. 如果考察完所有的区间，最右端的位置仍然无法推进到n
3. 第一个区间的左端点在0后面
## Code
```java=
class Solution {
    public int minTaps(int n, int[] ranges) {
        List<int[]> list = new ArrayList<>();
        for(int i=0; i<ranges.length; i++){
            list.add(new int[]{i-ranges[i], i+ranges[i]});
        }
        Collections.sort(list, (a,b)->(a[0]-b[0]));
        if(list.get(0)[0]>0) return -1;
        int far = 0;
        int nextfar = 0;
        int ans = 1;
        for(int i=0; i<list.size(); i++){
            if(list.get(i)[0]>far){
                if(far>=nextfar) return -1;
                far = nextfar;
                ans++;
            }
            nextfar = Math.max(nextfar, list.get(i)[1]);
            if(nextfar>=n) return ans;
        }
        return -1;
    }
}
```