LeetCode #2073 Time Needed to Buy Tickets Solution & Explanation

LeetCode Problem

There are n people in a line queuing to buy tickets, where the 0th person is at the front of the line and the (n – 1)th person is at the back of the line.

You are given a 0-indexed integer array tickets of length n where the number of tickets that the ith person would like to buy is tickets[i].

Each person takes exactly 1 second to buy a ticket. A person can only buy 1 ticket at a time and has to go back to the end of the line (which happens instantaneously) in order to buy more tickets. If a person does not have any tickets left to buy, the person will leave the line.

Return the time taken for the person at position k (0-indexed) to finish buying tickets.

Example 1:

Input: tickets = [2,3,2], k = 2
Output: 6
Explanation: 
- In the first pass, everyone in the line buys a ticket and the line becomes [1, 2, 1].
- In the second pass, everyone in the line buys a ticket and the line becomes [0, 1, 0].
The person at position 2 has successfully bought 2 tickets and it took 3 + 3 = 6 seconds.

Example 2:

Input: tickets = [5,1,1,1], k = 0
Output: 8
Explanation:
- In the first pass, everyone in the line buys a ticket and the line becomes [4, 0, 0, 0].
- In the next 4 passes, only the person in position 0 is buying tickets.
The person at position 0 has successfully bought 5 tickets and it took 4 + 1 + 1 + 1 + 1 = 8 seconds.

Constraints:

  • n == tickets.length
  • 1 <= n <= 100
  • 1 <= tickets[i] <= 100
  • 0 <= k < n

Solution

We set a max value to tickets[k], which represents the number of tickets the k-th person wants to buy.

Then, we use a for loop to iterate through each person (index i):

  • If i is less than or equal to k, it means this is a person before the k-th person. They can buy either up to max tickets or the lesser of their desired tickets (curr) and max. We accumulate the time by adding this amount.
  • If i is greater than k, it means this is a person after the k-th person. They can only buy up to max-1 tickets or the lesser of their desired tickets (curr) and max-1. This is because they are behind the k-th person in line, so they can buy at most max-1 tickets.

The logic of the code is primarily based on the ticket purchasing rules before and after the k-th person to calculate the total time required to buy all tickets.

C# Solution

Solution1

public class Solution {
    public int TimeRequiredToBuy(int[] tickets, int k) {
        int max = tickets[k];
        int secs = 0;
        for(int i=0; i<tickets.Length; i++){
            var curr = tickets[i];
            if(i<=k){
                secs+=Math.Min(curr,max);
            }
            else{
                secs+=Math.Min(curr,max-1);
            }
        }

        return secs;
    }
}

Time Complexity: O(n)

Java Solution

Solution1

class Solution {
    public int timeRequiredToBuy(int[] tickets, int k) {
        int max = tickets[k];
        int secs = 0;
        for(int i=0; i<tickets.length; i++){
            int curr = tickets[i];
            if(i<=k){
                secs+=Math.min(curr,max);
            }
            else{
                secs+=Math.min(curr,max-1);
            }
        }

        return secs;
    }
}

Time Complexity: O(n)

Klook.com

Conclusion

🧡If my solution helps, that is my honor!

🧡You can support me by sharing my posts, thanks a lot

If you got any problem about the explanation, please feel free to let me know

The problem link : Time Needed to Buy Tickets – LeetCode

Some Random LeetCode posts

Leave a Reply

Your email address will not be published. Required fields are marked *