LeetCode笔记:Biweekly Contest 92

Posted Espresso Macchiato

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Biweekly Contest 92相关的知识,希望对你有一定的参考价值。

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. 题目四

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

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

以上是关于LeetCode笔记:Biweekly Contest 92的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode笔记:Biweekly Contest 79

LeetCode笔记:Biweekly Contest 93

LeetCode笔记:Biweekly Contest 89

LeetCode笔记:Biweekly Contest 69

LeetCode笔记:Biweekly Contest 74

LeetCode笔记:Biweekly Contest 96