LeetCode笔记:Weekly Contest 208 比赛记录

方案设计之亿级排行榜方案设计 该方案通过 “Redis Zset 为核心 + 分治策略为骨架 + 多级优化为细节”,在亿级用户场景下实现了:本质是将 “亿级大问题” 拆解为 “千万级小问题”,用分布式思想和精细化设计平衡性能、可用性与成本。 阅读详情

0. 赛后总结

上周日的比赛因为国庆前的加班就错过了,然后现在临着放假了,就久违地回到国际版的leetcode做了一下周赛208的virtual contest,结果4道题一小时搞定,虚拟排名国际224名。。。

呵呵,我就说leetcode-cn和我相性不合!!!(╬▔皿▔)凸

嘛,算了,口high一下而已,毕竟临场发挥也算是实力的一环吧。。。

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这一题思路还是很明确的,因为不需要考虑路径的实际存在与否,也不需要考虑最终的目录所在,只要考虑最终的路径深度就行了,因为之后就只需要返回上一级目录直到回到根目录即可。

因此,我们只需要判断每一次操作后的路径深度就行,当进入子目录时,路径深度加一,返回上一级目录时路径深度减一,反之不变。

唯一需要注意的是,当当前路径恰好为根目录时,返回上一级目录命令并不会发生作用,因为不存在更上级目录。

2. 代码实现

给出最终的代码实现如下:

class Solution:
    def minOperations(self, logs: List[str]) -> int:
        ans = 0
        for op in logs:
            if op == "./":
                continue
            elif op == "../":
                ans = ans-1 if ans != 0 else 0
            else:
                ans += 1
        return ans

提交代码评测得到:耗时48ms,占用内存14.5MB。

当前最优算法耗时28ms,但是看了一下其代码实现,和我们的算法思路是完全一致的,因此就不再过多展开了。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这一题的题目描述比较长,说的比较复杂,但是解题思路却是比较清楚的,只需要按照题目意思不停地上下人即可。

当等待队列没有为空时,就考察如果在当前位置上终止运行时能够获取地最终受益,然后在所有的结果当中选取最大收益所处的时间即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minOperationsMaxProfit(self, customers: List[int], boardingCost: int, runningCost: int) -> int:
        profit = 0
        waiting = 0
        time = -1
        n = len(customers)
        for idx in range(n):
            c = customers[idx]
            waiting += c
            if waiting > 4:
                nxt = profit + 4*boardingCost-runningCost
                time = idx+1 if nxt > profit else time
                profit = nxt
                waiting -= 4
            else:
                nxt = profit + waiting*boardingCost-runningCost
                time = idx+1 if nxt > profit else time
                profit = nxt
                waiting = 0
            # print(idx, waiting, profit)
        while waiting != 0:
            if waiting > 4:
                nxt = profit + 4*boardingCost-runningCost
                time = n+1 if nxt > profit else time
                profit = nxt
                waiting -= 4
            else:
                nxt = profit + waiting*boardingCost-runningCost
                time = n+1 if nxt > profit else time
                profit = nxt
                waiting = 0
                break
            n += 1
        return time

提交代码评测得到:耗时1752ms,占用内存17.6MB。

当前的最优方案耗时820ms,但是没看懂他们的思路,然后直接试了以下他们的解法,发现是错的。。。错的。。。的。。。

累感不爱。。。>﹏<

如果有兴趣的读者可以自行研究一下,感觉应该还是有提升空间的,但是有多大就不好说了。。。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题的也是题目复杂的不行。它事实上考察的就是这个继承关系的数据结构要怎么构建。而有关这个继承关系的描述,事实上可以概括为:

  1. 子嗣优先于兄弟,且按照年龄排序;
  2. 当没有子嗣时,继承人为自己的兄弟;
  3. 当自己连兄弟也没有时,就返回父辈的兄弟;

因此,我们可以比较轻松地看出,这是一个树形结构,我们构建继承关系时,事实上就是一个中序遍历的过程。

但是,需要注意的是,针对这个树状结构,我们需要额外记录以下两个信息:

  1. 兄弟/孩子的出生顺序信息;
  2. 每一个人的存活信息;

一种可行的方式就是构建一个人的类,用类变量来记录相关信息,不过这样相对就会烦一点。所幸由于题目限定每个人都是不同名的,因此,我们可以通过两个外部字典来记录上述两个额外信息。

2. 代码实现

给出具体的python代码实现如下:

class ThroneInheritance:

    def __init__(self, kingName: str):
        self.king = kingName
        self.status = {kingName: True}
        self.children = defaultdict(list)

    def birth(self, parentName: str, childName: str) -> None:
        self.children[parentName].append(childName)
        self.status[childName] = True

    def death(self, name: str) -> None:
        self.status[name] = False

    def getInheritanceOrder(self) -> List[str]:
        ans = []
        
        def dfs(name):
            nonlocal ans
            if self.status[name]:
                ans.append(name)
            for name in self.children[name]:
                dfs(name)
        
        dfs(self.king)
        return ans

提交代码评测得到:耗时792ms,占用内存68.9MB。

当前的最优方案耗时688ms。看了一下他们的代码实现,核心算法思路上是完全一致的,因此就不过度展开了。

4. 题目四

给出题目四的试题链接如下:

1. 解题思路

这一题坦率地说倒是没有想到什么特别巧妙的解题方法,但是,看题目说限制了请求总数小于等于16,因此,我们尝试了一下暴力迭代的方法,结果居然通过了。。。

因此,这里的解题思路就比较简单粗暴了,就是考察每一个申请在允许和拒绝两种情况下的运行调动人数,在满足调动条件的情况下令调动人数最大。

2. 代码实现

给出python代码实现如下:

import math

class Solution:
    def maximumRequests(self, n: int, requests: List[List[int]]) -> int:
        status = [0 for i in range(n)]
        
        def dp(idx):
            if idx == len(requests):
                if all(x == 0 for x in status):
                    return 0
                else:
                    return -math.inf
            ans = dp(idx+1)
            u, v = requests[idx]
            status[u] -= 1
            status[v] += 1
            ans = max(ans, 1 + dp(idx+1))
            status[u] += 1
            status[v] -= 1
            return ans
        
        return dp(0)

提交代码评测得到:耗时1920ms,占用内存14.2MB。

当前最优的代码实现耗时近36ms,需要好好考察以下他们的实现。

3. 算法优化

看了一下大佬们的算法,核心的部分事实上还是采用了迭代的方式,不过,不同于我们那么暴力地针对每一个申请进行选择与不选择的二元分类,大佬们首先使用dfs对所有的请求进行了一次粗筛,找出其中能够构成环的申请组合(只有能够构成环的组合才能保证总输入输出为0),而后对这些组合进行和我们一样的迭代运算。

这里,我们就偷懒没有自行去实现一遍大佬们的算法,这里直接摘录leetcode中大佬们的代码实现如下,有兴趣的读者可以自己研读一下。

class Solution:
    def maximumRequests(self, n: int, requests: List[List[int]]) -> int:
        # 这个算法用set 和tuple用的真好
        graph = defaultdict(set)
        result = 0
        request_index = 0
        # BUILD GRAPH AND ADD ALL REUQSTS [X, X] right to result
        for from_, to in requests:
            if from_ == to:
                result += 1
            else:
                graph[from_].add((request_index, to))
                request_index += 1

        in_progres = set()
        cycles = set()
        
        # FIND ALL CYCLES
        def dfs(from_, request_path, building_path):
            for request_index, to in graph[from_]:
                if to in building_path:
                    cycles.add(tuple(sorted(request_path[building_path.index(to):] + [request_index])))
                else:
                    dfs(to, request_path + [request_index], building_path + [to])
        
        for i in range(n):
            dfs(i, [], [i])
        
        cycles = [set(x) for x in cycles]
        
        # FIND SET OF CYCLES THAT USES MAXIMUM REQUESTS
        def backtrack(j, current):
            max_requests = len(current)
            for k in range(j, len(cycles)):
                joined = current | cycles[k]
                if len(joined) == len(current) + len(cycles[k]):
                    max_requests = max(backtrack(k + 1, joined), max_requests)
            return max_requests

        return result + backtrack(0, set())
【数据集】全球首个10米分辨率精细分类土地覆盖数据集GLC_FCS10 阅读详情

相关推荐

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4589

1601. Maximum Number of Achievable Transfer Requests

题目: We havenbuildings numbered from0ton - 1. Each building has a number of employees. It's transfer season, and some employees want to change the building they reside in. You are given an arrayrequestswhererequests[i] = [fromi, toi]represents an...

weixin_49991368的博客 196

未隔离电源设备使用usb转串口调试导致串口模块爆炸烧坏事故记录

这个事就发生在前两天,我们公司的wifi模块被客户用到了咖啡机上,客户寄了一台整机给我们协助调试,还送了几包咖啡豆,本想着还能打个咖啡喝一喝的,但就在咖啡机刚寄过来第一天,就出事了。而这个事故的发生,竟然仅仅是因为同事接了个串口模块到电脑调试打印导致的。谁也想不到,这个3.3V的供电的wifi模块居然还有这么大的威力。直接将usb转TTL串口模块的转换芯片给爆开了,咖啡机也给弄坏了,据同事描述当时情况就只见到一片火光和一声巨响,状况比较惨烈,所幸的是笔记本电脑没有烧坏,但是直接给崩蓝屏了。 ...

fangye945a的博客 6195

Maximum Number of Achievable Transfer Requests

We havenbuildings numbered from0ton - 1. Each building has a number of employees. It's transfer season, and some employees want to change the building they reside in. You are given an arrayrequestswhererequests[i] = [fromi, toi]represents an empl...

leetcode 解题思路 365

浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现

迪杰斯特拉(Dijkstra)算法和A*算法的原理及实现。

Guo_Zhanyu 9600

YOLOv11改进 | Conv篇 | 图像去雾卷积DEConv助力yolov11有效涨点(部署零额外开销)

本文介绍了一种最新改进机制用于低层视觉任务的细节增强卷积(DEConv)机制。DEConv在训练阶段采用"普通卷积+差分卷积"的多分支并联结构,增强网络对边缘、纹理等细节特征的学习能力;在推理阶段可折叠为标准3×3卷积,保持与普通卷积相同的计算效率。文中详细阐述了DEConv的工作原理、实现方法以及在YOLOv11中的应用步骤,包括核心代码解析、模型修改方法和训练配置。实验表明,该机制在去雾、去噪、超分等强调细节重建的任务中具有显著优势。文章还提供了完整的代码实现和训练指导.

Snu77的博客 2438

5526. 最多可达成的换楼请求数目()

难度困难 我们有n栋楼,编号从0到n - 1。每栋楼有若干员工。由于现在是换楼的季节,部分员工想要换一栋楼居住。 给你一个数组requests,其中requests[i] = [fromi, toi],表示一个员工请求从编号为fromi的楼搬到编号为toi的楼。 一开始所有楼都是满的,所以从请求列表中选出的若干个请求是可行的需要满足每栋楼员工净变化为 0。意思是每栋楼离开的员工数目等于该楼搬入的员工数数目。比方说n = 3且两个员工要离开楼0,一个...

Yanpr919的博客 745

LPDDR6 Efficiency Mode 技术探讨

LPDDR6 Efficiency Mode 技术探讨

zilan23的博客 1161

LeetCode笔记:Biweekly Contest 70

LeetCode笔记:Biweekly Contest 70 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 1. 题目一 给出题目一的试题链接如下: 2144. Minimum Cost of Buying Candies With Discount 1. 解题思路 这一题直接使用贪婪算法即可实现。 首先我们将价格进行排序,然后价..

codename_cys的博客 5535

flash均衡磨损--实时保存设备数据

【代码】flash均衡磨损--实时保存设备数据。

Car12 480

Allegro如何导入芯片的Pin Delay?

Allegro在做等长时,需要导入芯片的Pin Delay才能做真正的等长。因为有些芯片内部的引脚本身就是不等长的,例如海思的部分芯片。在右栏找到芯片U1,然后在Pin Delay栏下找一个PIN脚随便输入一个数值,这一步的目的是导出Pin Delay.csv文件的格式。4、用这份文件的格式,重新编辑需要导入芯片的Pin Delay,然后选择菜单File→Import→Pin delay。2、回到PCB,选择菜单File→Export→Pin delay,导出Pin Delay。

bhxc809751502的博客 5144

LeetCode笔记:Weekly Contest 219 比赛记录

LeetCode笔记:Weekly Contest 219 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 这一次的比赛怎么说呢,感觉有点不尴不尬的。 要说吧,4道题也都做出来了,耗时老实说也没有特别长,不算错误惩罚的话其实也就56分钟,不到1个小时,整体虽然没有挤进国内前100,好歹也有前4%(116/..

codename_cys的博客 4819

(11-3-01 )

以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强大工具。在本节的内容中,将实型一个完整的机器学习模型项目,智能检测出以太坊区块链中的非法账户。从问题定义到模型建立和评估,再到最终的总结和建议。本实例突出了处理类别不平衡问题的重要性,并展示了如何使用多种机器学习算法来解决实际问题。此外,通过数据可

码农三叔 2171

Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation

Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation

codename_cys的博客 3868

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode笔记:Weekly Contest 221 比赛记录

LeetCode笔记:Weekly Contest 221 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 昨天才遭遇滑铁卢,本以为成绩已经够差了,结果转头今天就被打脸,成绩比昨天还差,国内468/3397,全球1274/8838,真的是,不想说什么了。 不过这次真心是我自找的,第三题明明是一道简单的题目..

codename_cys的博客 3303

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode笔记:Weekly Contest 229 比赛记录

LeetCode笔记:Weekly Contest 229 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 这周的比赛整体都给跪了,两场比赛都是不顺的要死,昨天的比赛还能归结到看错题目,这次的比赛就真的是没得洗了,第三题超时之后就没有更好的思路了,第四题压根没有一个可行的思路,想到的解法实现出来之后发现都..

codename_cys的博客 2468

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode笔记:Weekly Contest 206 比赛记录

LeetCode笔记:Weekly Contest 206 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 最近不知是换到中文leetcode平台之后水土不服还是怎么样,感觉真的是到了瓶颈期了,最近几次打比赛真的是一次不如一次,做起来异常不顺手。 看了一下头部几位大佬们的做题耗时,基本都还是在10分钟左右..

codename_cys的博客 2016

Leetcode 3600. Maximize Spanning Tree Stability with Upgrades

3600. Maximize Spanning Tree Stability with Upgrades

codename_cys的博客 1751

LeetCode笔记:Biweekly Contest 42 比赛记录

LeetCode笔记:Biweekly Contest 42 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 唉,前两周刚和同学吹牛说现在leetcode的比赛基本都能在前10%,发挥好的话能争国内前100,然后这周转头就被打脸,打得啪啪响,国内320/1578,世界1023/6631,连前20%都没卡进..

codename_cys的博客 1720

Leetcode 3448. Count Substrings Divisible By Last Digit

Leetcode 3448. Count Substrings Divisible By Last Digit

codename_cys的博客 1712

Leetcode 3537. Fill a Special Grid

Leetcode 3537. Fill a Special Grid

codename_cys的博客 1627

LeetCode笔记:Weekly Contest 220 比赛记录

LeetCode笔记:Weekly Contest 220 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 这次的比赛结果略惨,只做出3题,然后国内才只有229/3690,世界则是667/9606,都是只有前7%的水平。 但是这次的题目应该算是比较简单的,看了一下,第一名的大佬只花了不到10分钟就搞定了,..

codename_cys的博客 1581

Leetcode 3389. Minimum Operations to Make Character Frequencies Equal

Leetcode 3389. Minimum Operations to Make Character Frequencies Equal

codename_cys的博客 1552

Leetcode 3609. Minimum Moves to Reach Target in Grid

Leetcode 3609. Minimum Moves to Reach Target in Grid

codename_cys的博客 1528

LeetCode笔记:Weekly Contest 203 比赛记录

LeetCode笔记:Weekly Contest 203 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 昨天刚刚历史性地第一次打进了前500,今天转头就历史性地打进了前200,实在是有点开心。 不过说到底还是因为题目比较简单的关系,看了一下,前头的大佬们都是10分钟左右就做完的,实在不认为这次的题目比..

codename_cys的博客 1523

LeetCode笔记:Weekly Contest 279

LeetCode笔记:Weekly Contest 279 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 1. 题目一 给出题目一的试题链接如下: 2164. Sort Even and Odd Indices Independently 1. 解题思路 这题还是比较直接的,就是先按照奇偶性取出元素,然后分别进行排序之后进行重组即..

codename_cys的博客 1514
上一篇: NLP笔记:推荐问题常用metrics整理
下一篇: LeetCode笔记:Biweekly Contest 36 比赛记录
Espresso Macchiato
博客等级 码龄7年 2453粉丝 818原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值