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