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

g2001_2100.s2029_stone_game_ix.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g2001_2100.s2029_stone_game_ix;

// #Medium #Array #Math #Greedy #Counting #Game_Theory
// #2022_06_21_Time_14_ms_(53.97%)_Space_126.8_MB_(25.40%)

/**
 * 2029 - Stone Game IX\.
 *
 * Medium
 *
 * Alice and Bob continue their games with stones. There is a row of n stones, and each stone has an associated value. You are given an integer array `stones`, where `stones[i]` is the **value** of the ith stone.
 *
 * Alice and Bob take turns, with **Alice** starting first. On each turn, the player may remove any stone from `stones`. The player who removes a stone **loses** if the **sum** of the values of **all removed stones** is divisible by `3`. Bob will win automatically if there are no remaining stones (even if it is Alice's turn).
 *
 * Assuming both players play **optimally** , return `true` _if Alice wins and_ `false` _if Bob wins_.
 *
 * **Example 1:**
 *
 * **Input:** stones = [2,1]
 *
 * **Output:** true
 *
 * **Explanation:** The game will be played as follows: 
 *
 * - Turn 1: Alice can remove either stone. 
 *
 * - Turn 2: Bob removes the remaining stone. 
 *   
 * The sum of the removed stones is 1 + 2 = 3 and is divisible by 3. Therefore, Bob loses and Alice wins the game.
 *
 * **Example 2:**
 *
 * **Input:** stones = [2]
 *
 * **Output:** false
 *
 * **Explanation:** Alice will remove the only stone, and the sum of the values on the removed stones is 2. 
 *
 * Since all the stones are removed and the sum of values is not divisible by 3, Bob wins the game.
 *
 * **Example 3:**
 *
 * **Input:** stones = [5,1,2,4,3]
 *
 * **Output:** false
 *
 * **Explanation:** Bob will always win. One possible way for Bob to win is shown below: 
 *
 * - Turn 1: Alice can remove the second stone with value 1. Sum of removed stones = 1. 
 *
 * - Turn 2: Bob removes the fifth stone with value 3. Sum of removed stones = 1 + 3 = 4. 
 *
 * - Turn 3: Alices removes the fourth stone with value 4. Sum of removed stones = 1 + 3 + 4 = 8. 
 *
 * - Turn 4: Bob removes the third stone with value 2. Sum of removed stones = 1 + 3 + 4 + 2 = 10. 
 *
 * - Turn 5: Alice removes the first stone with value 5. Sum of removed stones = 1 + 3 + 4 + 2 + 5 = 15.
 *   
 * Alice loses the game because the sum of the removed stones (15) is divisible by 3. Bob wins the game.
 *
 * **Constraints:**
 *
 * *   1 <= stones.length <= 105
 * *   1 <= stones[i] <= 104
**/
public class Solution {
    public boolean stoneGameIX(int[] stones) {
        int zero = 0;
        int one = 0;
        int two = 0;
        for (int i : stones) {
            if (i % 3 == 0) {
                zero++;
            } else if (i % 3 == 1) {
                one++;
            } else if (i % 3 == 2) {
                two++;
            }
        }
        if (one == 0 && two == 0) {
            return false;
        }
        int max = Math.max(one, two);
        int min = Math.min(one, two);
        if (zero % 2 == 0) {
            return min != 0;
        }
        if (zero % 2 == 1) {
            return max - 2 > min;
        }
        return false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy