#2212

Maximum Points in an Archery Competition

Medium
ArrayBacktrackingBit ManipulationEnumerationGreedyBacktracking
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n)
Space
O(1)
O(n)
💡

Intuition

Time O(n)Space O(n)

The optimal solution uses a greedy approach to allocate Bob's arrows strategically. By focusing on the sections where Bob can win with the least arrows, we maximize his score efficiently.

⚙️

Algorithm

4 steps
  1. 1Step 1: Initialize an array for Bob's arrows and set the maximum points to zero.
  2. 2Step 2: Iterate from the highest score section (11) to the lowest (0).
  3. 3Step 3: For each section, check if Bob can win by shooting more arrows than Alice. If so, allocate the necessary arrows and adjust the remaining arrows.
  4. 4Step 4: If there are arrows left after winning, distribute them to the lowest scoring sections.
solution.py16 lines
1# Full working Python code
2
3def maxPoints(numArrows, aliceArrows):
4    bobArrows = [0] * 12
5    maxPoints = 0
6    arrowsLeft = numArrows
7
8    for score in range(11, -1, -1):
9        if arrowsLeft > aliceArrows[score]:
10            bobArrows[score] = aliceArrows[score] + 1
11            arrowsLeft -= bobArrows[score]
12
13    if arrowsLeft > 0:
14        bobArrows[0] += arrowsLeft
15
16    return bobArrows

Complexity note: The optimal solution iterates through the scoring sections once, leading to linear complexity. The space complexity is also linear due to the output array.

  • 1Bob should aim to win the sections where he can do so with the least arrows.
  • 2Distributing remaining arrows to lower scoring sections can help maximize points.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.