重刷LeetCode-脑筋急转弯

日期记录(更新题号)
2020年8月13日292. Nim 游戏
1227. 飞机座位分配概率
2020年8月17日1503. 所有蚂蚁掉下来前的最后一刻
319. 灯泡开关

292. Nim 游戏

(1)题目描述

你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/nim-game

(2)思路与解法

找规律:
1–赢
2–赢
3–赢
4–输
5–赢
6–赢
7–赢
8–输

可以发现,如果是可以被4整除,就会输。

class Solution {
    public boolean canWinNim(int n) {
        return (n%4 != 0);
    }
}

1227. 飞机座位分配概率

(1)题目描述

有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。

剩下的乘客将会:

如果他们自己的座位还空着,就坐到自己的座位上,

当他们自己的座位被占用时,随机选择其他座位
第 n 位乘客坐在自己的座位上的概率是多少?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/airplane-seat-assignment-probability

(2)思路与解法

解法一:后面每一个人来了之后如果自己的座位上有人就把他赶走,所以2~n-1号就会对位入座。
1号就在1和n号之间以50的概率坐下。
PS:我随便坐,和我让你起来随便坐,概率是一样的哦。

https://leetcode-cn.com/problems/airplane-seat-assignment-probability/solution/1227-fei-ji-zuo-wei-fen-pei-gai-lu-by-yukarun/

解法二:数学推理,暂时劝退了。。。终究很久没看了。。。想起来几个月前我可是打算考研的人。。

1503. 所有蚂蚁掉下来前的最后一刻

(1)题目描述

有一块木板,长度为 n 个 单位 。一些蚂蚁在木板上移动,每只蚂蚁都以 每秒一个单位 的速度移动。其中,一部分蚂蚁向 左 移动,其他蚂蚁向 右 移动。

当两只向 不同 方向移动的蚂蚁在某个点相遇时,它们会同时改变移动方向并继续移动。假设更改方向不会花费任何额外时间。

而当蚂蚁在某一时刻 t 到达木板的一端时,它立即从木板上掉下来。

给你一个整数 n 和两个整数数组 left 以及 right 。两个数组分别标识向左或者向右移动的蚂蚁在 t = 0 时的位置。请你返回最后一只蚂蚁从木板上掉下来的时刻。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/last-moment-before-all-ants-fall-out-of-a-plank

(2)思路与解法

当两个蚂蚁相遇的时候,最后一个蚂蚁掉下去的时间,与两只蚂蚁是否改变方向无关。换言之,这是一个干扰选项。

class Solution {
    public int getLastMoment(int n, int[] left, int[] right) {
        int res = 0;
        for(int i = 0; i < left.length; i++) {
            res = Math.max(res, left[i]);
        }
         for(int i = 0; i < right.length; i++) {
            res = Math.max(res, n - right[i]);
        }
        return res;
    }
}

319. 灯泡开关

(1)题目描述

初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bulb-switcher

(2)解法与思路

以下思路参考自:

为什么平方数一定是亮着的?从数学角度证明

找下规律可以发现,灯泡被切换的轮数,是第i个灯泡的因数:
第1个:第一轮
第2个:第一轮、第二轮
第3个:第一轮、第三轮
第4个:第一轮、第二轮、第四轮
第10个:第一轮、第二轮、第五轮、第十轮

那么切换次数为奇数次的,最后是开的。那哪些数字有奇数个因数呢?完全平方数(简要证明下:P=A*B,A!=B,那么A和B一定是成对出现的,因子个数一定是偶数)。

class Solution {
    public int bulbSwitch(int n) {
        int res = 0;
        for(int i = 1; i <= n; i ++) {
            if(i * i <= n) {
                res++;
            }
            else {
                break;
            }
        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值