Leetcode-editorials
Contribute
  • Leetcode question of the day
  • 08-August
    • 26. Maximum Length of Pair Chain
    • 28. Implement stack using queues
    • 29. Minimum Penalty for a Shop
    • 30. Minimum Replacements to Sort the Array
    • 31. Minimum Number of Taps to Open to Water a Garden
  • 09-September
    • 01. Counting Bits
    • 02. Extra Characters in a String
    • 03. Unique Paths
    • 04. Linked List Cycle
    • 05. Copy List with Random Pointer
    • 06. Split Linked List in Parts
    • 07. Reverse Linked List II
    • 08. Pascal's Triangle
    • 09. Combination Sum IV
    • 10. Count All Valid Pickup and Delivery Options
    • 11. Group the People Given the Group Size They Belong To
    • 12. Minimum Deletions to Make Character Frequencies Unique
    • 13. Candy
    • 14. Reconstruct Itinerary
    • 15. Min Cost to Connect All Points
    • 16. Path With Minimum Effort
    • 17. Shortest Path Visiting All Nodes
    • 18. The K Weakest Rows in a Matrix
    • 19. Find the Duplicate Number
    • 20. Minimum Operations to Reduce X to Zero
    • 21-Median of Two Sorted Arrays
    • 22- Is Subsequence
    • 23- Longest String Chain
    • 24- Champagne Tower
    • 25- Find the Difference
    • 26- Remove Duplicate Letters
    • 27- Decoded String at Index
    • 28- Sort Array By Parity
    • 29- Monotonic Array
    • 30- 132 Pattern
  • 10-October
    • 01. Reverse Words in a String III
    • 02. Remove Colored Pieces if Both Neighbors are the Same Color
    • 03. Number of Good Pairs
    • 04. Design HashMap
    • 05. Majority Element II
    • 06. Integer Break
    • 07. Build Array Where You Can Find The Maximum Exactly K Comparisons
  • 11-November
    • 01. Find Mode in Binary Search Tree
    • 02. Count Nodes Equal to Average of Subtree
    • 03. Build an Array With Stack Operations
    • 04. Last Moment Before All Ants Fall Out of a Plank
    • 07. Eliminate Maximum Number of Monsters
  • Leetcode Contests
    • Weekly Contest
      • Weekly-Contest-360
Powered by GitBook
On this page
  • My Approach
  • Time and Auxiliary Space Complexity
  • Code (C++)
  • Contribution and Support

Was this helpful?

Edit on GitHub
  1. 08-August

31. Minimum Number of Taps to Open to Water a Garden

Previous30. Minimum Replacements to Sort the ArrayNext09-September

Last updated 1 year ago

Was this helpful?

The problem can be found at the following link:

My Approach

This is a question on greedy approch, as we have given how to find the range of the given taps . We can calculate the range of each tap and check if we can manage to find a tap which have largest current range. we can do it as :

  1. Initialize variables:

    • minRange and maxRange to keep track of the minimum and maximum positions that can be covered by the currently selected taps (both initially set to 0).

    • taps to keep track of the number of taps used (initialized to 0).

    • curindex to keep track of the index of the last selected tap (initialized to 0).

  2. Create a while loop that continues until maxRange is greater than or equal to n. This loop is used to extend the covered range step by step.

  3. Inside the while loop, iterate through the taps (represented by the ranges vector) starting from the curindex. For each tap i:

    • Check if the tap can cover the current position (i - ranges[i]) and if it can extend the range further (i + ranges[i] > maxRange).

    • If both conditions are met, update maxRange to i + ranges[i] and update curindex to i. This tap is chosen as it extends the maximum coverage.

  4. After examining all taps within the current range, if minRange is equal to maxRange, it means that no tap can be selected to extend the coverage further. In this case, return -1 to indicate that it's impossible to cover the entire range.

  5. Increment taps to count the tap that has been used to extend the coverage.

  6. Update minRange to maxRange to indicate that the current range has been fully covered.

  7. Repeat steps 3-6 until maxRange is greater than or equal to n.

Time and Auxiliary Space Complexity

  • Time Complexity: O(n)

  • Auxiliary Space Complexity: O(1) because we used an extra queue..

Code (C++)

class Solution {
public:
    int minTaps(int n, vector<int>& ranges) {
        int minRange =0, maxRange =0;
        int taps =0; int curindex =0;

        while(maxRange < n){
            for(int i=curindex;i<ranges.size();i++){
                if(i-ranges[i]<=minRange && i+ranges[i]>maxRange){
                    maxRange = i+ranges[i];
                    curindex = i;
                }
            }
            if(minRange == maxRange) return -1;
            taps++;
            minRange = maxRange;
        }
        return taps;
    }
};

Contribution and Support

For discussions, questions, or doubts related to this solution, please visit our . We welcome your input and aim to foster a collaborative learning environment.

If you find this solution helpful, consider supporting us by giving a ⭐ star to the repository.

Question Link
discussion section
rishabhv12/Daily-Leetcode-Solution