LeetCode笔记:Weekly Contest 290
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Weekly Contest 290相关的知识,希望对你有一定的参考价值。
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题思路倒是比较直接,就是遍历然后每次取交集即可。
2. 代码实现
我们给出python代码实现如下:
class Solution:
def intersection(self, nums: List[List[int]]) -> List[int]:
n = len(nums)
s = set(nums[0])
for i in range(1, n):
s = s & set(nums[i])
return sorted(s)
提交代码评测得到:耗时119ms,占用内存14.2MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题我的思路比较暴力,就是一个三重循环。
对每一个圆,我们都找到其中所有的点,然后合在一起返回长度即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def countLatticePoints(self, circles: List[List[int]]) -> int:
points = set()
for x, y, r in circles:
points.add((x, y))
for i in range(1, r+1):
points.add((x-i, y))
points.add((x+i, y))
points.add((x, y-i))
points.add((x, y+i))
for i in range(1, r):
for j in range(1, r):
if i*i + j*j <= r*r:
points.add((x-i, y-j))
points.add((x-i, y+j))
points.add((x+i, y-j))
points.add((x+i, y+j))
# print(points)
return len(points)
提交代码评测得到:耗时2098ms,占用内存18.8MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题也还好,就是一个累积矩阵,不过由于x长度很长,所以我们不得不去除掉所有没有真实值的坐标,仅仅对出现了矩阵的x坐标进行记录。
而y方向上由于总共只有100个可取的值,所以这里就偷了个懒,直接全部记录了。
剩下的,我们就是求一下累积矩阵就是了,不过唯一特殊的是,这个矩阵是反着来的。
2. 代码实现
我们给出python代码实现如下:
class Solution:
def countRectangles(self, rectangles: List[List[int]], points: List[List[int]]) -> List[int]:
n = len(rectangles)
rectangles = sorted(rectangles)
xlist = [x[0] for x in rectangles]
cnt = [[0 for _ in range(101)] for _ in range(n+1)]
# print(cnt)
for i, (x, y) in enumerate(rectangles):
cnt[i][y] += 1
for i in range(n, 0, -1):
cnt[i-1][100] += cnt[i][100]
for j in range(100, 0, -1):
cnt[i-1][j-1] += cnt[i][j-1] + cnt[i-1][j] - cnt[i][j]
res = []
for x, y in points:
idx = bisect.bisect_left(xlist, x)
res.append(cnt[idx][y])
return res
提交代码评测得到:耗时5322ms,占用内存231.9MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题和上一题其实差不多,反而还更加简单一点,就是一个一维的累积数组,不过键值是离散的,只需要记录几个关键节点,即花开和结束的时间。
然后,在对游客进行考察时,需要找到其进入的时间点所处的关键节点位置,从而得到当时开放的花朵的数目。
2. 代码实现
给出python代码实现如下:
class Solution:
def fullBloomFlowers(self, flowers: List[List[int]], persons: List[int]) -> List[int]:
cnt = defaultdict(int)
for st, ed in flowers:
cnt[st] += 1
cnt[ed+1] -= 1
timestamps = sorted(cnt.keys())
n = len(timestamps)
flowers = [cnt[t] for t in timestamps]
for i in range(n-1):
flowers[i+1] += flowers[i]
res = []
for p in persons:
idx = bisect.bisect_right(timestamps, p)
if idx > 0:
res.append(flowers[idx-1])
else:
res.append(0)
return res
提交代码评测得到:耗时1093ms,占用内存41.3MB。
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖以上是关于LeetCode笔记:Weekly Contest 290的主要内容,如果未能解决你的问题,请参考以下文章