黑板上写着一个非负整数数组 nums[i] 。Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败。 (另外,如果只剩一个数字,按位异或运算得到它本身;如果无数字剩余,按位异或运算结果为 0。)

换种说法就是,轮到某个玩家时,如果当前黑板上所有数字按位异或运算结果等于 0,这个玩家获胜。

假设两个玩家每步都使用最优解,当且仅当 Alice 获胜时返回 true。

示例:

输入: nums = [1, 1, 2]
输出: false

解释:
Alice 有两个选择: 擦掉数字 1 或 2。
如果擦掉 1, 数组变成 [1, 2]。剩余数字按位异或得到 1 XOR 2 = 3。那么 Bob 可以擦掉任意数字,因为 Alice 会成为擦掉最后一个数字的人,她总是会输。
如果 Alice 擦掉 2,那么数组变成[1, 1]。剩余数字按位异或得到 1 XOR 1 = 0。Alice 仍然会输掉游戏。

解题思路

奇偶不变

因为ALice和Bob是轮流取数字的,所以如果刚开始的元素个数是偶数个,那么Alice每次取元素时,元素都是偶数。

S^nums[i]=Si

设Si为数组去掉第i个元素以后的异或的结果,S为所有元素异或的结果,即有Sinums[i]=S,变形得Snums[i]=Si

反证法

在数组长度为偶数并且S!=0(因为如果S=0,那么就胜负已经确定了)的情况,假设无论取走的元素是哪个,都有Si=0
即S0=0,S1=0…,等价于S0S1S2…=0,代入S^nums[i]=Si

(S^nums[0])^(S^nums[1])^....=0

(S^S...)^(nums[0]^nums[1]....)=0

又因为S为所有元素异或的结果,并且数组长度为偶数,所以有偶数个S,因此

S^S…(奇数个S)=0,即S=0,与S!=0矛盾,所以可以得出无论取走的元素是哪个,都不存在Si=0,也就是说数组长度为偶数的那一方,可以使得另一方永远产生不了剩下元素异或结果为0的情况。

所以Alice要想赢,只需要两种情况

  • 原数组异或的结果是0,因为Alice是先手,所以直接就赢了
  • 原数组的长度为偶数

代码

class Solution {public boolean xorGame(int[] nums) {int res=0;if((nums.length&1)==0) return true;for (int num : nums) {res^=num;}return res==0;}
}

leetcode 810. 黑板异或游戏相关推荐

  1. LeetCode 810. 黑板异或游戏(博弈推理)

    1. 题目 一个黑板上写着一个非负整数数组 nums[i] . 小红和小明轮流从黑板上擦掉一个数字,小红先手. 如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败 ...

  2. 【LeetCode每日一题】810. 黑板异或游戏

    [LeetCode每日一题]810. 黑板异或游戏 题目: 黑板上写着一个非负整数数组 nums[i] .Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手.如果擦除一个数字后,剩余的 ...

  3. 文巾解题 810. 黑板异或游戏

    1 题目描述 2 解题思路 ·根据游戏规则,轮到某个玩家时,如果当前黑板上所有数字异或结果等于 0,则当前玩家获胜.由于 Alice 是先手,因此如果初始时黑板上所有数字异或结果等于 0,则Alice ...

  4. 2021-05-22 黑板异或游戏

    题目: 题目地址: https://leetcode-cn.com/problems/chalkboard-xor-game/submissions/ 黑板异或游戏 黑板上写着一个非负整数数组 num ...

  5. [Swift]LeetCode810. 黑板异或游戏 | Chalkboard XOR Game

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. leetcode 810. Chalkboard XOR Game

    leetcode 810. Chalkboard XOR Game 原题地址:https://leetcode.com/problems/chalkboard-xor-game/ 题目 We are ...

  7. 【LeetCode击败99%+】Nim 游戏

    题目 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头. 你们轮流进行自己的回合,你作为先手. 每一回合,轮到的人拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者. 假设你们每一 ...

  8. LeetCode——1803. 统计异或值在范围内的数对有多少(Count Pairs With XOR in a Range)[困难]——分析及代码(Java)

    LeetCode--1803. 统计异或值在范围内的数对有多少[Count Pairs With XOR in a Range][困难]--分析及代码[Java] 一.题目 二.分析及代码 1. 暴力 ...

  9. LeetCode 1535. 找出数组游戏的赢家

    文章目录 1. 题目 2. 解题 1. 题目 给你一个由 不同 整数组成的整数数组 arr 和一个整数 k . 每回合游戏都在数组的前两个元素(即 arr[0] 和 arr[1] )之间进行. 比较 ...

最新文章

  1. webbrowser php,C# WinForm WebBrowser 设置为编辑模式的示例代码
  2. Spring Cloud Gateway 之获取请求体的几种方式
  3. 监听输入 vue_深度对比vue与react创建APP的差别,值得收藏
  4. 如何用css和HTML结合画熊,结合伪元素实现的纯CSS3高级图形绘制
  5. c语言程序题是如何判分的,C语言编程题判分系统的研究与实现
  6. C语言课后习题(49)
  7. Java创建对象小结
  8. 阿里云河源数据中心正式开服 疫情期间曾2小时扩容1万台云服务器
  9. 语音识别的准确率,永远达不到100%?
  10. php10天速成培训,十天学会php之第九天
  11. 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)
  12. 详细讲解32F103/MS51单片机串口ISP程序下载的方法和操作步骤
  13. linux系统每次开机分辨率,解决linux分辨率设置过高 不能进入图形界面
  14. 激活Windows Vista Home Basic Aero玻璃效果
  15. java点击注册跳转到注册页面_web项目为什么点击注册按钮跳转不到注册页面?...
  16. 计算机硬件检测与维修理论试题,计算机硬件检测与维修试题10.doc
  17. 万豪国际集团公布新任首席执行官和总裁
  18. 《经典算法》数独问题
  19. go语言中的换行和分号
  20. 程序员们,挑一把适合自己的机械键盘吧。。

热门文章

  1. linux下 最常用基本命令
  2. 【信号】信号集、sigprocmask、sigpending
  3. 保驾护航金三银四,使用指南
  4. 自适应阈值化操作:adaptiveThreshold()函数
  5. ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
  6. 解决EF 4.0 中数据缓存机制
  7. HDOJ---2236 无题II[二分枚举+匈牙利]
  8. iOS5 UI 设计新手段 Storyboard
  9. 同层物体间的遮挡处理
  10. mysql实战33 | 我查这么多数据,会不会把数据库内存打爆?