All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0901_1000.s0948_bag_of_tokens.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0901_1000.s0948_bag_of_tokens;

// #Medium #Array #Sorting #Greedy #Two_Pointers
// #2022_12_26_Time_2_ms_(100.00%)_Space_42_MB_(85.95%)

import java.util.Arrays;

/**
 * 948 - Bag of Tokens\.
 *
 * Medium
 *
 * You have an initial **power** of `power`, an initial **score** of `0`, and a bag of `tokens` where `tokens[i]` is the value of the ith token (0-indexed).
 *
 * Your goal is to maximize your total **score** by potentially playing each token in one of two ways:
 *
 * *   If your current **power** is at least `tokens[i]`, you may play the ith token face up, losing `tokens[i]` **power** and gaining `1` **score**.
 * *   If your current **score** is at least `1`, you may play the ith token face down, gaining `tokens[i]` **power** and losing `1` **score**.
 *
 * Each token may be played **at most** once and **in any order**. You do **not** have to play all the tokens.
 *
 * Return _the largest possible **score** you can achieve after playing any number of tokens_.
 *
 * **Example 1:**
 *
 * **Input:** tokens = [100], power = 50
 *
 * **Output:** 0
 *
 * **Explanation:** Playing the only token in the bag is impossible because you either have too little power or too little score.
 *
 * **Example 2:**
 *
 * **Input:** tokens = [100,200], power = 150
 *
 * **Output:** 1
 *
 * **Explanation:** Play the 0th token (100) face up, your power becomes 50 and score becomes 1. 
 *
 * There is no need to play the 1st token since you cannot play it face up to add to your score.
 *
 * **Example 3:**
 *
 * **Input:** tokens = [100,200,300,400], power = 200
 *
 * **Output:** 2
 *
 * **Explanation:** Play the tokens in this order to get a score of 2: 
 * 1. Play the 0th token (100) face up, your power becomes 100 and score becomes 1. 
 * 2. Play the 3rd token (400) face down, your power becomes 500 and score becomes 0. 
 * 3. Play the 1st token (200) face up, your power becomes 300 and score becomes 1. 
 * 4. Play the 2nd token (300) face up, your power becomes 0 and score becomes 2.
 *
 * **Constraints:**
 *
 * *   `0 <= tokens.length <= 1000`
 * *   0 <= tokens[i], power < 104
**/
public class Solution {
    public int bagOfTokensScore(int[] tokens, int power) {
        Arrays.sort(tokens);
        int score = 0;
        int l = 0;
        int r = tokens.length - 1;
        while (l <= r) {
            if (tokens[l] <= power) {
                power -= tokens[l];
                score++;
                l++;
            } else {
                if (r - l == 0) {
                    return score;
                }
                if (score >= 1) {
                    power += tokens[r];
                    score--;
                    r--;
                } else {
                    return 0;
                }
            }
        }
        return score;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy