vlambda博客
学习文章列表

【每日编程-446期】Leetcode.1025.除数博弈



1025.除数博弈




样例一:

输入:2
输出:true
解释:爱丽丝选择 1,鲍勃无法进行操作。

样例二:

输入:3
输出:false
解释:爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。

提示:

  1. 1 <= N <= 1000

【每日编程-446期】Leetcode.1025.除数博弈

解决方法:

(1)算法的基本思想:

1.数字N如果是奇数,它的约数必然都是奇数;若为偶数,则其约数可奇可偶。
2.无论N初始为多大的值,游戏最终只会进行到N=2时结束,那么谁轮到N=2时谁就会赢。

3.因为爱丽丝先手,N初始若为偶数,爱丽丝则只需一直选1,使鲍勃一直面临N为奇数的情况,这样爱丽丝稳赢;

N初始若为奇数,那么爱丽丝第一次选完之后N必为偶数,那么鲍勃只需一直选1就会稳赢。
综述,判断N是奇数还是偶数,即可得出最终结果!


链接:https://leetcode-cn.com/problems/two-sum/solution/qi-shi-shi-yi-dao-shu-xue-ti-by-coder233/

来源:力扣(LeetCode)

(2)代码实现:

  
    
    
  
class Solution {
public:
    bool divisorGame(int N) {
       return N % 2 == 0
    }
};

class Solution {
public:
    bool divisorGame(int N) {
        int h = 0;
    for (int i = 1; i < N; i++) {
        if (N % i == 0) {
            N = N - i;
            i = 0;
            h++;
        }
    }
    return h % 2 == 0 ? 0 : 1;
    }
};


明日预告:Leetcode.961.重复N次的元素

在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。

返回重复了 N 次的那个元素。

示例 1:

输入:[1,2,3,3]
输出:3

示例 2:

输入:[2,1,2,5,3,2]
输出:2

示例 3:

输入:[5,1,5,2,5,3,5,4]
输出:5

提示:

  1. 4 <= A.length <= 10000

  2. 0 <= A[i] < 10000

  3. A.length 为偶数

class Solution {
public:
    int repeatedNTimes(vector<int>& A) {

    }
};