LeetCode笔记:Biweekly Contest 92

本文概述了LeetCode Biweekly Contest 92中的四个题目:圆切分问题的解决方案,矩阵中1和0数量差异计算,商店关闭策略最小惩罚,以及帕累托序列计数。通过实例解析和代码展示,分享了关键解题思路和Python实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

要把圆n等分,我们可以很直接的获得每一个弧形的弧度,然后如果这个弧度可以拼成180度角,那么我们就可以将两条半径合成一条直径。

因此,只要n是偶数,那么我们就全用直径进行分割即可,反之就只能全用半径进行分割。

2. 代码实现

给出python代码实现如下:

class Solution:
    def numberOfCuts(self, n: int) -> int:
        if n == 1:
            return 0
        return n if n % 2 == 1 else n//2

提交代码评测得到:耗时54ms,占用内存13.9MB。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这题没想到啥好的思路,就按照题意实现一下就完了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def onesMinusZeros(self, grid: List[List[int]]) -> List[List[int]]:
        n, m = len(grid), len(grid[0])
        ones_row = [0 for _ in range(n)]
        zeros_row = [0 for _ in range(n)]
        ones_col = [0 for _ in range(m)]
        zeros_col = [0 for _ in range(m)]
        
        for i in range(n):
            zeros, ones = 0, 0
            for j in range(m):
                if grid[i][j] == 0:
                    zeros += 1
                else:
                    ones += 1
            ones_row[i] = ones
            zeros_row[i] = zeros
            
        for j in range(m):
            zeros, ones = 0, 0
            for i in range(n):
                if grid[i][j] == 0:
                    zeros += 1
                else:
                    ones += 1
            ones_col[j] = ones
            zeros_col[j] = zeros
            
        diff = [[ones_row[i] + ones_col[j] - zeros_row[i] - zeros_col[j] for j in range(m)] for i in range(n)]
        return diff

提交代码评测得到:耗时5045ms,占用内存44.4MB。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题其实也相对比较简单,就是考察在每一个时间点上关店会带来的penalty,然后找出最小值。

而某一个时间点上关店的penalty就是后续来客的数目之和加上之前的时间点上没有人来的时刻数。

因此,我们用一个累积数组就能搞定这道题目。

2. 代码实现

给出python代码实现如下:

class Solution:
    def bestClosingTime(self, customers: str) -> int:
        n = len(customers)
        cnt = [0 for _ in range(n)]
        s = 0
        for i in range(n):
            if customers[i] == "Y":
                s += 1
            cnt[i] = s
        
        s = cnt[-1]
        res = 0
        for i in range(n):
            if i+1 - cnt[i] + cnt[-1] - cnt[i] < s:
                res = i+1
                s = i+1 - cnt[i] + cnt[-1] - cnt[i]
        return res

提交代码评测得到:耗时1278ms,占用内存18.7MB。

4. 题目四

给出题目四的试题链接如下:

没啥好的思路,放弃了,唉……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值