Maximize Value of Function in a Ball Passing Game
HARDDescription
You are given an integer array receiver of length n and an integer k. n players are playing a ball-passing game.
You choose the starting player, i. The game proceeds as follows: player i passes the ball to player receiver[i], who then passes it to receiver[receiver[i]], and so on, for k passes in total. The game's score is the sum of the indices of the players who touched the ball, including repetitions, i.e. i + receiver[i] + receiver[receiver[i]] + ... + receiver(k)[i].
Return the maximum possible score.
Notes:
receivermay contain duplicates.receiver[i]may be equal toi.
Example 1:
Input: receiver = [2,0,1], k = 4
Output: 6
Explanation:
Starting with player i = 2 the initial score is 2:
| Pass | Sender Index | Receiver Index | Score |
|---|---|---|---|
| 1 | 2 | 1 | 3 |
| 2 | 1 | 0 | 3 |
| 3 | 0 | 2 | 5 |
| 4 | 2 | 1 | 6 |
Example 2:
Input: receiver = [1,1,1,2,3], k = 3
Output: 10
Explanation:
Starting with player i = 4 the initial score is 4:
| Pass | Sender Index | Receiver Index | Score |
|---|---|---|---|
| 1 | 4 | 3 | 7 |
| 2 | 3 | 2 | 9 |
| 3 | 2 | 1 | 10 |
Constraints:
1 <= receiver.length == n <= 1050 <= receiver[i] <= n - 11 <= k <= 1010
Approaches
Checkout 2 different approaches to solve Maximize Value of Function in a Ball Passing Game. Click on different approaches to view the approach and algorithm in detail.
Brute Force Simulation
This approach directly simulates the ball-passing game for each possible starting player. We iterate through all n players, considering each one as a potential starting point. For each starting player, we simulate k passes, accumulating the score along the way by adding the index of each player who touches the ball.
Algorithm
- Initialize a variable
max_scoreto 0. - Loop through each player
ifrom0ton-1to consider them as the starting player. - For each starting player
i, initializecurrent_score = iandcurrent_player = i. - Loop
ktimes to simulate the passes:- Update
current_playertoreceiver[current_player]. - Add the new
current_player's index tocurrent_score.
- Update
- After the inner loop,
current_scoreholds the total score for starting with playeri. Updatemax_score = max(max_score, current_score). - After iterating through all possible starting players,
max_scorewill hold the maximum possible score.
The algorithm iterates through every possible starting player from 0 to n-1. For each start player, it simulates the game for k passes. In each pass, it finds the next player using the receiver array and adds their index to a running total for the current game. This process is repeated k times. The maximum score found across all possible starting players is then returned.
class Solution {
public long getMaxFunctionValue(int[] receiver, long k) {
int n = receiver.length;
long maxScore = 0;
for (int i = 0; i < n; i++) {
long currentScore = i;
int currentPlayer = i;
for (long j = 0; j < k; j++) {
currentPlayer = receiver[currentPlayer];
currentScore += currentPlayer;
}
maxScore = Math.max(maxScore, currentScore);
}
return maxScore;
}
}
Complexity Analysis
Pros and Cons
- Simple to understand and implement.
- Requires minimal memory.
- Extremely inefficient for large values of
k. - Will result in a 'Time Limit Exceeded' (TLE) error on most platforms for the given constraints.
Code Solutions
Checking out 3 solutions in different languages for Maximize Value of Function in a Ball Passing Game. Click on different languages to view the code.
class Solution {
public
long getMaxFunctionValue(List<Integer> receiver, long k) {
int n = receiver.size(), m = 64 - Long.numberOfLeadingZeros(k);
int[][] f = new int[n][m];
long[][] g = new long[n][m];
for (int i = 0; i < n; ++i) {
f[i][0] = receiver.get(i);
g[i][0] = i;
}
for (int j = 1; j < m; ++j) {
for (int i = 0; i < n; ++i) {
f[i][j] = f[f[i][j - 1]][j - 1];
g[i][j] = g[i][j - 1] + g[f[i][j - 1]][j - 1];
}
}
long ans = 0;
for (int i = 0; i < n; ++i) {
int p = i;
long t = 0;
for (int j = 0; j < m; ++j) {
if ((k >> j & 1) == 1) {
t += g[p][j];
p = f[p][j];
}
}
ans = Math.max(ans, p + t);
}
return ans;
}
}
Video Solution
Watch the video walkthrough for Maximize Value of Function in a Ball Passing Game
Similar Questions
5 related questions you might find useful
Patterns:
Data Structures:
Subscribe to Scale Engineer newsletter
Learn about System Design, Software Engineering, and interview experiences every week.
No spam, unsubscribe at any time.