Minimum Number of Taps to Open to Water a Garden LeetCode solution in Java
1class Solution {2public int minTaps(int n, int[] ranges) {3Integer[] idx = IntStream.range(0, ranges.length).boxed().toArray(Integer[]::new);4Arrays.sort(idx, Comparator.comparingInt(o -> o - ranges[o]));5int ans = 1, cur = 0, end = 0;6for (int i = 0; i < ranges.length && end < n; i++) {7int j = idx[i];8if (j - ranges[j] > cur) {9cur = end;10ans++;11}12if (j - ranges[j] <= cur) {13end = Math.max(end, j + ranges[j]);14}15}16return end < n ? -1 : ans;17}18}