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

g0801_0900.s0810_chalkboard_xor_game.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0801_0900.s0810_chalkboard_xor_game;

// #Hard #Array #Math #Bit_Manipulation #Game_Theory #Brainteaser
// #2022_03_23_Time_0_ms_(100.00%)_Space_41.6_MB_(95.74%)

/**
 * 810 - Chalkboard XOR Game\.
 *
 * Hard
 *
 * You are given an array of integers `nums` represents the numbers written on a chalkboard.
 *
 * Alice and Bob take turns erasing exactly one number from the chalkboard, with Alice starting first. If erasing a number causes the bitwise XOR of all the elements of the chalkboard to become `0`, then that player loses. The bitwise XOR of one element is that element itself, and the bitwise XOR of no elements is `0`.
 *
 * Also, if any player starts their turn with the bitwise XOR of all the elements of the chalkboard equal to `0`, then that player wins.
 *
 * Return `true` _if and only if Alice wins the game, assuming both players play optimally_.
 *
 * **Example 1:**
 *
 * **Input:** nums = [1,1,2]
 *
 * **Output:** false
 *
 * **Explanation:** 
 *
 * Alice has two choices: erase 1 or erase 2. 
 *
 * If she erases 1, the nums array becomes [1, 2]. 
 *
 * The bitwise XOR of all the elements of the chalkboard is 1 XOR 2 = 3. 
 *
 * Now Bob can remove any element he wants, because Alice will be the one to erase the last element and she will lose. 
 *
 * If Alice erases 2 first, now nums become [1, 1]. 
 *
 * The bitwise XOR of all the elements of the chalkboard is 1 XOR 1 = 0. 
 *
 * Alice will lose.
 *
 * **Example 2:**
 *
 * **Input:** nums = [0,1]
 *
 * **Output:** true
 *
 * **Example 3:**
 *
 * **Input:** nums = [1,2,3]
 *
 * **Output:** true
 *
 * **Constraints:**
 *
 * *   `1 <= nums.length <= 1000`
 * *   0 <= nums[i] < 216
**/
public class Solution {
    public boolean xorGame(int[] nums) {
        int xor = 0;
        for (int i : nums) {
            xor = xor ^ i;
        }
        return xor == 0 || (nums.length & 1) == 0;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy