当前位置:网站首页>LeetCode笔记:Weekly Contest 304
LeetCode笔记:Weekly Contest 304
2022-08-02 11:07:00 【Espresso Macchiato】
0. 小结
这一周的四道题倒是挺顺利地就搞定了,不过鉴于第一名也就花了5分钟,实在是也没啥成就感……
最近一段时间可能真的比较凌乱吧,房子快要到期了,然后忙忙碌碌地找新室友,公司里面也是刚好轮到on call,各种报警烦的一塌糊涂……
唯一的好消息大概就是最近终于重新做了一些模型方面的优化,不过时间紧任务重,结果方面目前还没有什么太过拿得出手的结果,不过总算能写代码就算是比较幸福的事情了……
anyway,算是自己发发牢骚吧,忘了在哪看到过说这世上其实没有长大这么一回事,说白了其实就是确实地认识到所有的事都需要自己来兜底了,所以发牢骚归发牢骚,抱怨过后一切依然照旧,总不能因为心累就放弃努力了吧,那就真的啥希望都没了……
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题只要对数字进行去重,然后找到所有的非零数字的个数即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minimumOperations(self, nums: List[int]) -> int:
nums = set(nums)
n = len(nums)
return n if min(nums) != 0 else n-1
提交代码评测得到:耗时61ms,占用内存13.8MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题事实上我们可以给出一个万能的数列构造方法,即:
- 我们对所有的数字进行从小到大有序排列,然后依次取1、2、3…个元素,直至无法取满元素之后将剩余的元素加入到最后一个堆之中。
由上述构造方法,我们总能够完成目标构造,且上述构造方式能够构造的堆一定是最多的。
因此,假设总元素个数为n,那么我们只需要找到一个最大的x,使得满足下式即可。
x ( x + 1 ) 2 ≤ n \frac{x(x+1)}{2} \leq n 2x(x+1)≤n
这就变成一道初中数学题目了……
2. 代码实现
给出python代码实现如下:
class Solution:
def maximumGroups(self, grades: List[int]) -> int:
n = len(grades)
return int((math.sqrt(8*n+1)-1) / 2)
提交代码评测得到:耗时743ms,占用内存27.3MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题的话细节上其实有蛮多需要考察的特殊情况的,比如是否成环,是否联通等等,如果一开始没注意到这些的话还是比较容易答错的。不过我们可以给出一个较为一般的思路,从而使得无需对上述特殊情况进行考察。
具体而言,我们只要分别以两个node作为起点,然后考察所有其能够往后经历到达的点(到循环或者终点结束),记录下其距离,然后比较两个距离之中的较大值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def closestMeetingNode(self, edges: List[int], node1: int, node2: int) -> int:
n = len(edges)
dis1 = [math.inf for _ in range(n)]
dis = 0
while edges[node1] != -1 and dis1[node1] == math.inf:
dis1[node1] = dis
dis += 1
node1 = edges[node1]
if dis1[node1] == math.inf:
dis1[node1] = dis
dis2 = [math.inf for _ in range(n)]
dis = 0
while edges[node2] != -1 and dis2[node2] == math.inf:
dis2[node2] = dis
dis += 1
node2 = edges[node2]
if dis2[node2] == math.inf:
dis2[node2] = dis
dis = math.inf
res = -1
for i in range(n):
if max(dis1[i], dis2[i]) < dis:
dis = max(dis1[i], dis2[i])
res = i
return res
提交代码评测得到:耗时1498ms,占用内存28.8MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题和上一题的思路基本是一脉相承的,只需要以每一个点作为起点考察一下其是否成环,然后成环的话这个环的长度是多少,然后取出一个最大值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def longestCycle(self, edges: List[int]) -> int:
n = len(edges)
dis = [-1 for _ in range(n)]
res = -1
for i in range(n):
if dis[i] != -1:
continue
d = 0
path = set()
while edges[i] != -1 and dis[i] == -1:
path.add(i)
dis[i] = d
i = edges[i]
d += 1
if i in path:
res = max(res, d-dis[i])
return res
提交代码评测得到:耗时1961ms,占用内存33.4MB。
边栏推荐
- Oracle 19c配置ob server
- Breaking the Boundary, Huawei's Storage Journey
- 4年手工测试被应届生取代了,用血与泪的教训给xdm一个忠告,该学自动化了...
- 流动性质押挖矿系统开发如何制作?单双币系统开发成熟技术
- After 21 years of graduation, I switched to software testing. From 0 income to a monthly salary of over 10,000, I am really lucky...
- Kotlin的协程与生命周期
- LayaBox---TypeScript---Namespaces and modules
- 学习笔记-支付宝支付
- 全方位剖析Numpy中的np.diag源代码
- SQL 数据更新
猜你喜欢
随机推荐
bgp与mpls综合实验
3 d laser slam: LeGO - LOAM - ground point extracting method and the analysis of the code
QT笔记——QT类反射机制简单学习
MySQL百万数据优化总结 一
LayaBox---TypeScript---声明合并
Nanny Level Tutorial: Write Your Own Mobile Apps and Mini Programs (Part 2)
38岁女儿不恋爱没有稳定工作老母亲愁哭
ansible模块--copy模块
SQL 经典50题(题目+解答)(1)
LayaBox---TypeScript---Module Analysis
LeetCode每日一练 —— 20. 有效的括号
数字化转型中的低代码
How to encapsulate the wx.request() request of WeChat applet
Mysql事务隔离级别与MVCC(多版本并发控制)
Hello, my new name is "Bronze Lock/Tongsuo"
find查找多类型结尾文件
LayaBox---TypeScript---Symbols
Geoffery Hinton:深度学习的下一个大事件
字母交换--字符串dp
如何在技术上来保证LED显示屏质量?