当前位置:网站首页>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。
边栏推荐
猜你喜欢
只问耕耘,不问收获,其实收获却在耕耘中
MSYS2 QtCreator Clangd code analysis can not find mm_malloc.h problem remedy
注意力机制
有奖征集|TaoCloud&宝德联合举办全闪POC!
阿里CTO程立:阿里巴巴开源的历程、理念和实践
Camera Hal OEM模块 ---- cmr_snapshot.c
太帅了!我用炫酷大屏展示爬虫数据!
Three.JS程序化建模入门
How to choose a truly "easy-to-use, high-performance" remote control software
Com多进程通信实现
随机推荐
3年测试在职,月薪还不足2w,最近被裁员,用亲身经历给大家提个醒...
学习笔记-支付宝支付
3 d laser slam: LeGO - LOAM - ground point extracting method and the analysis of the code
Challenge LeetCode1000 questions in 365 days - Day 047 Design Circular Queue Circular Queue
SQLAlchemy使用教程
4年手工测试被应届生取代了,用血与泪的教训给xdm一个忠告,该学自动化了...
10份重磅报告 — 展望中国数字经济未来
Several reasons why applet plugins benefit developers
8年软件测试工程师的感悟:与薪资相匹配的永远是实力
Mysql transaction isolation level and MVCC (multi-version concurrency control)
通过方法引用获取方法名
X86函数调用模型分析
LayaBox---TypeScript---Advanced Type
ASP.NET Core 6框架揭秘实例演示[31]:路由&quot;高阶&quot;用法
STM32+MPU6050 Design Portable Mini Desktop Clock (Automatically Adjust Time Display Direction)
OLED的HAL库代码介绍及使用(stm32f1/I2C/HAL库版/100%一次点亮)
Shell编程之条件语句
一体化在线政务服务平台,小程序容器技术加速建设步伐
2022年8月初济南某外包公司全栈开发面试题整理
Oracle查询提示 ORA-00933 SQL command not properly ended 原因排查