LeetCode—石子游戏
提示:
2 <= piles.length <= 500
piles.length 是偶数。
1 <= piles[i] <= 500
sum(piles) 是奇数。
解题思路
此处撰写解题思路
首先理清题目要求:
1.亚历克斯先取石头
2.每回合玩家只能从开始或结束处取走整堆石头
3.两位玩家都发挥最佳水平(意思就是每个人选取时,都是选取当前首尾两处石子数更多的)
代码思路:
题目给了首指针(piles)和石子的堆数,那我们可以定义一个尾指针(ptail),指向尾处,每次选取石子的时候就判断当前首尾的石子数大小,把数量多的加入玩家手中,并且对指向已被取走的石子处的指针进行移动,而对于那个玩家取石头可以定义一个flag,当flag = 1时,亚历克斯取石子,当flag = -1时,李取石子,最后对两位玩家的石子数进行比较。
代码:
bool stoneGame(int* piles, int pilesSize){
int alex = 0;//亚历克斯的石子数
int li = 0;李的石子数
int flag = 1;//用于切换取石子的玩家
int* ptail = piles + (pilesSize - 1);//指向尾处
while(pilesSize--)//一共有pilesSize堆石子,取pilesSize次
{
if(flag == 1)
{
if(*piles > *ptail)
{
alex += *piles;
piles++;
}
else
{
alex += *ptail;
ptail--;
}
}
else
{
if(*piles > *ptail)
{
alex += *piles;
piles++;
}
else
{
alex += *ptail;
ptail--;
}
}
flag = -flag;//切换为另一个玩家
}
if(alex > li)
return true;
else
return false;
}