LeetCode笔记:Weekly Contest 269
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Weekly Contest 269相关的知识,希望对你有一定的参考价值。
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题的解题思路还是比较直接的,就是按照题意先进行排序,然后直接找target所处的位置。
2. 代码实现
给出python代码实现如下:
class Solution:
def targetIndices(self, nums: List[int], target: int) -> List[int]:
nums = sorted(nums)
return [i for i, x in enumerate(nums) if x == target]
提交代码评测得到:耗时40ms,占用内存14.4MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题的思路也非常的直接,就是维护一个窗口,然后计算其总和之后然后除以窗口长度即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def getAverages(self, nums: List[int], k: int) -> List[int]:
n = len(nums)
res = [-1 for _ in range(n)]
if n < 2*k+1:
return res
tot = sum(nums[:2*k+1])
for i in range(k, n-k):
res[i] = tot // (2*k+1)
if i != n-k-1:
tot += nums[i + k+1] - nums[i-k]
return res
提交代码评测得到:耗时1732ms,占用内存33MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题反而简单了,由于元素是unique的,因此,我们只需要找到最大和最小元素的位置。
然后要把他们删除事实上就只有三种可能性,从左删,从右删或者是两头一起删,我们只需要比较三者中的最小值返回即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minimumDeletions(self, nums: List[int]) -> int:
i = nums.index(max(nums))
j = nums.index(min(nums))
i, j = (i, j) if i <= j else (j, i)
n = len(nums)
return min(j+1, n-i, i+1+n-j)
提交代码评测得到:耗时904ms,占用内存27.5MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这题的主要思路就是一个DSU的变种,感觉也没啥好多说的……
而有关DSU的说明,网上已经够多了,我自己也写过一个博客(经典算法:并查集(DSU)结构简介),感觉也更加没啥好多说的了……
2. 代码实现
给出python代码实现如下:
class DSU:
def __init__(self, flag):
self.dsu = flag: flag, 0: flag
self.flag = flag
def add(self, val):
if val not in self.dsu:
self.dsu[val] = val
def find(self, x):
self.add(x)
if self.dsu[x] != x:
self.dsu[x] = self.find(self.dsu[x])
return self.dsu[x]
def union(self, x, y, known):
x = self.find(x)
y = self.find(y)
if x in known:
self.dsu[y] = x
else:
self.dsu[x] = y
class Solution:
def findAllPeople(self, n: int, meetings: List[List[int]], firstPerson: int) -> List[int]:
known = firstPerson, 0
meetings = sorted(meetings, key=lambda x: x[2])
i, m = 0, len(meetings)
while i < m:
j = i
dsu = DSU(firstPerson)
while j < m and meetings[j][2] == meetings[i][2]:
dsu.union(meetings[j][0], meetings[j][1], known)
j += 1
for x in dsu.dsu:
if dsu.find(x) in known:
known.add(x)
i = j
return list(known)
提交代码评测得到:耗时2788ms,占用内存44.3MB。
以上是关于LeetCode笔记:Weekly Contest 269的主要内容,如果未能解决你的问题,请参考以下文章