0877. 石子游戏
题目地址(877. 石子游戏)
https://leetcode-cn.com/problems/stone-game/
题目描述
前置知识
动态规划
公司
阿里
字节
思路
由于 piles 是偶数的,并且 piles 的总和是奇数的。
因此 Alex可以做到
要不拿的全部是奇数,要么全部是偶数。
举个例子: 比如 Alex 第一次先拿第一个
这里有两种情况:
Lee 如果拿了第二块(偶数),那么 Alex 继续拿第三块,以此类推。。。
Lee 如果拿了最后一块(偶数),那么 Alex 继续拿倒数第二块,以此类推。。。
因此 Alex可以
做到只拿奇数或者偶数,只是他可以控制的,因此他要做的就是数一下,奇数加起来多还是偶数加起来多就好了。 奇数多就全部选奇数,偶数就全部选偶数。 Lee 是没有这种自由权的。
关键点解析
可以用 DP(动态规划)
可以从数学的角度去分析
代码
扩展
腾讯面试题:一共 100 只弓箭 你和你的对手共用。你们每次只能射出一支箭或者两支箭,射击交替进行,设计一个算法,保证自己获胜。
答案: 先手,剩下的是 3 的倍数就行(100-1=99),然后按照 3 的倍数射箭必赢。 比如你先拿了 1,剩下 99 个。 对手拿了 1,你就拿 2。这样持续 33 次就赢了。如果对手拿了 2 个,你就拿 1 个,这样持续 33 次你也是赢的。
这是一种典型的博弈问题, 你和对手交替进行,对手的行动影响你接下来的策略。 这算是一种最简单的博弈问题了
最后更新于