LeetCode笔记:Weekly Contest 220 比赛记录

经典的鸢尾花分类 数据的分类和处理是以后更要加强学习的部分,今天先把代码贴在这了,算是立一个flag # -*- coding:utf-8 -*- import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.feature_selection import SelectKBest, Sele... 阅读详情

0. 赛后总结

这次的比赛结果略惨,只做出3题,然后国内才只有229/3690,世界则是667/9606,都是只有前7%的水平。

但是这次的题目应该算是比较简单的,看了一下,第一名的大佬只花了不到10分钟就搞定了,而我没有做出来的最后一题,事实上就是一个DSU的问题,之前我也专门写博客聊过这个算法(Python笔记:并查集(DSU)结构简介),然而在比赛中还是没有搞出来。

倒不是完全没有想到过使用DSU,但是终究还是想岔了,没能想到正确的使用方法,导致最后一题没有做出来,不过这个后面再谈吧,唉。。。

1. 题目一

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

1. 解题思路

这一题挺直接的,解题思路上就是先去掉空格和-字符,然后按照3个数字为一组进行分割,知道最后几位进行特殊处理即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def reformatNumber(self, number: str) -> str:
        number = number.replace("-", "").replace(" ", "")
        n = len(number)
        res = []
        idx = 0
        while idx < n-4:
            res.append(number[idx:idx+3])
            idx += 3
        if n - idx == 4:
            res.extend([number[idx:idx+2], number[idx+2:idx+4]])
        else:
            res.append(number[idx:])
        return "-".join(res)

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

当前的最优算法耗时28ms,但看了一下思路是一致的,因此这里就不过多展开了。

2. 题目二

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

1. 解题思路

这一题的思路其实还是蛮明确的,就是维护一个滑动窗口,确保窗口中不会存在重复的元素。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maximumUniqueSubarray(self, nums: List[int]) -> int:
        i, j, n = 0, 0, len(nums)
        counter = defaultdict(int)
        ans = 0
        score = 0
        while j < n:
            while i < j and counter[nums[j]] == 1:
                score -= nums[i]
                counter[nums[i]] -= 1
                i += 1
            while j < n and counter[nums[j]] == 0:
                score += nums[j]
                counter[nums[j]] += 1
                j += 1
            ans = max(ans, score)
        return ans

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

当前的最优算法耗时792ms,但是看了一下,他们的算法思路和我们是相同的,因此这里就不过多展开了。

3. 题目三

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

1. 解题思路

这一题的思路就是使用动态规划算法。

他的递推关系还是非常明确的,可以给出递推关系如下:

f ( i ) = n i + m a x ( f ( j ) )   ( i < j ≤ i + k ) f(i) = n_i + max(f(j)) \ (i< j \leq i+k) f(i)=ni​+max(f(j)) (i<j≤i+k)

我们尝试了直接暴力地求解,但是这样的时间复杂度是 O ( N × K ) O(N \times K) O(N×K)的,就会导致超时,但是这一题事实上可以参考上一周双周赛的最后一题的思路,使用一个有序队列进行处理,就可以将时间复杂度退化到 O ( N ) O(N) O(N),具体的算法说明可以参考我们上周的比赛记录(LeetCode笔记:Biweekly Contest 41 比赛记录),这里就不对具体的细节进行展开了。

2. 代码实现

我们直接给出python代码实现如下:

class Solution:
    def maxResult(self, nums: List[int], k: int) -> int:
        n = len(nums)
        dp = [k for k in nums]
        q = [(nums[-1], n-1)]
        for i in range(n-2, -1, -1):
            while q != [] and q[-1][1] > i + k:
                q.pop()
            dp[i] += q[-1][0]
            while q != [] and q[0][0] < dp[i]:
                q.pop(0)
            q.insert(0, (dp[i], i))
        return dp[0]

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

当前最优的代码实现耗时704ms,但是看了一下他们的思路和我们是完全一致的,因此这里就不多做展开了。

4. 题目四

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

1. 解题思路

这题比赛的时候没做出来真的是太伤了,赛后看了一下awice大神的解答,发现我没做出来真的是太菜了。

这题的思路其实挺直白的,显然由于n最大可以取到 1 0 5 10^5 105,因此要求的算法复杂度肯定不能超过 O ( N 2 ) O(N^2) O(N2),最好只有 O ( N ) O(N) O(N),那么一个直接的思路就是使用DSU(这部分内容的说明可以参考我们之前的博客:Python笔记:并查集(DSU)结构简介)。

到这里事实上比赛的时候我们也想到了,但是具体的实现上却犯了难,因为他事实上只允许使用有限的边,是要返回两个点的所有连通方案中的最小实现方案中的最大边长,而DSU只能够反应聚合关系以及整个聚类的一些特征,而无法反应其中更小的集合的关系,因此比赛的时候就没有想出来,当然,这个后续可以通过其他方式绕开,我们等会再说。

然后另外一种思路就是使用动态规划,将历史计算结果全部保存在缓存当中,从而优化执行效果,这个是我比赛的时候的思路,但是遇到的问题就是怎么存储状态,然后你懂的,不到南墙不回头,死的不能更惨,唉。。。

我们回过头来重新说说正确的使用dsu的方法吧。

问题如果简化到对于某一个具体的query,事实上我们只要使用边长小于limit的边进行dsu的构建即可。因此,我们就可以很简单的使用dsu进行解答,但是,问题在于对于每一个query,我们都要针对limit进行一次dsu的构建,这个就会非常复杂,必然会带来超时问题。

但是,如果我们实现对query针对limit进行排序的话,那么,我们事实上就不需要每次都进行dsu的构建了,只要全局的构建一个dsu结构就能够解决这个问题了。

2. 代码实现

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

class DSU:
    def __init__(self, n):
        self.dsu = [i for i in range(n)]
    
    def find(self, x):
        if self.dsu[x] != x:
            self.dsu[x] = self.find(self.dsu[x])
        return self.dsu[x]
    
    def union(self, x, y):
        x = self.find(x)
        y = self.find(y)
        if x != y:
            self.dsu[y] = x
        return

class Solution:
    def distanceLimitedPathsExist(self, n: int, edgeList: List[List[int]], queries: List[List[int]]) -> List[bool]:
        edges = sorted(edgeList, key=lambda x: x[2])
        queries = sorted([(idx, u, v, limit) for idx, (u, v, limit) in enumerate(queries)], key=lambda x: x[-1])
        m = len(edges)
        
        res = [False for _ in queries]
        i = 0
        dsu = DSU(n)
        for idx, u, v, limit in queries:
            while i < m and edges[i][2] < limit:
                p, q, _ = edges[i]
                dsu.union(p, q)
                i += 1
            res[idx] = (dsu.find(u) == dsu.find(v))
        return res

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

当前最优的代码实现耗时1812ms,但是看了一下同样是采用dsu方式进行的实现,因此这里就不过多进行展开了。

DAT与IDX格式文件如何打开? 1. 概述 为什么微图下载的卫星影像是DAT文件? 为什么水经注在百度网盘免费分享的卫星影像是DAT文件? 为什么水经注在百度网盘免费分享的高程DEM是DAT文件? 为什么在微图中免费下载的高清卫星影像是DAT文件? DAT文件用什么软件打开查看? IDX文件是作什么用的? 在我们与客户接触的过程中,以上是我们经常被问到的关于DAT与IDX文件格式的问题。 这里,我们就来对DAT文件与IDX文件格式的产生及用法作一个较为详细的说明,读完本文之后,以上的问题就能迎刃而解了! 关于百度网盘免费 阅读详情

相关推荐

东华大学oj系统 39 最大乘积

39 最大乘积 作者: Turbo时间限制: 1S章节: 深度优先搜索 问题描述 : 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入说明 : 第一行一个数表示数据组数   每组输入数据共2行:   第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,   第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。 输出说明 : 每组数据输出1行,为最大的乘积。 输入范例 : 1 5 5 1 2 3 4 2 输出范例 : 48 注:难

weixin_50336369的博客 525

python中range和len

python中range和len

DINGDING156的博客 1708

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

一朵花开的时间 6150

python中for循环的用法_PyThon range()函数中for循环用法

最初range和xrange都生成可以用for循环迭代的数字,然而在python2和3里实现方式并不完全一致,下面着重讲讲python3的range()函数for循环用法。1、函数语法range(start, stop, [step])2、参数说明start: 可选参数,计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)stop: 必选参数,计数到 st...

weixin_39600328的博客 1713

硅谷刷屏的ClawdBot,让Mac mini卖爆了!创始人爆料:一人开发、100% AI 写代码

这两天,个人 AI 助手 ClawdBot 席卷硅谷,国内外社交平台上全是关于它的讨论。 在试用后,网友们纷纷给出了很高的评价。“它是迄今为止最伟大的 AI 应用,相当于你 24 小时全天候专属 AI 员工。”Creator Buddy 创始人兼 CEO Alex Finn 盛赞道,“这就是他们 (Anthropic) 希望 Claude Cowork 呈现的样子。”

技术引领业务创新 1580

(保姆教程)Spyder 配置Tensorflow(2.5.0)和keras(2.4.3)

(保姆教程)Spyder 配置Tensorflow(2.5.0)和keras(2.4.3)

qq_43102225的博客 1万+

在python中for i in range是什么意思-range在python中是什么意思

python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step:步长,...

weixin_37988176的博客 2万+

李宏毅机器学习hw3

Homework 3 - Convolutional Neural Network 1作业概述 在food_11文件中有三个文件分别是training、validation、testing,打开training和validation可以看见总共有11种食物(0-10的类别编号),而testing是没有类别编号的。 然后用卷积神经网络对食物图片进行分类。 2导入用到的库 torch库 这个我弄了半天,直接pip总是timeout,用镜像源下下来又出现OSError: [WinError..

老问题的博客 4187

fasttext源码学习(2)--模型压缩

fasttext源码学习(2)–模型压缩 前言 fasttext模型压缩的很明显,精度却降低不多,其网站上提供的语种识别模型,压缩前后的对比就是例证,压缩前126M,压缩后917K。太震惊了,必须学习一下。看文档介绍用到权重量化(weight quantization)和特征选择(feature selection),下面结合代码学习下。 说明:文章中代码皆为简化版,为突出重点,简化了逻辑,原版代码需到官方网页下载。 一 特征选择 一开始以为fasttext会用到比较复杂的特征选择算法,直到看到代码才差点闪

凉水的博客 1380

什么是Claude 的 Agent Skills?

摘要: Claude的Agent Skills功能支持通过结构化技能包(含指令、脚本、工具)实现任务自动化,如数据分析、文档生成等。核心能力包括:1)技能包管理(如Python脚本+模板);2)工具调用(API/数据库交互);3)子代理协作(拆分复杂任务)。快速上手步骤:创建技能包(如Excel报表生成)、配置工具权限、触发执行;支持多代理并行处理(如SQL查询+可视化)。关键技巧:工具需明确定义参数、利用子代理共享上下文、注重权限管控。官方文档与社区资源提供进阶指导,使Claude成为可编程的数字助手。

jobleap.cn求职助手首页 1729

自定义模型训练——打造专属OpenClaw模型(2026AI版)

本文介绍了OpenClaw自定义模型训练的核心流程,包括框架选择(PyTorch、TensorFlow、HuggingFace和原生OpenClaw框架)、训练环境搭建脚本、以及数据收集系统的设计。数据收集器支持从数据库、API、文件和网络等多种来源获取训练数据,并提供灵活的过滤机制确保数据质量。通过这套系统,开发者可以高效准备训练数据,为后续模型训练打下坚实基础。

博客 874

LeetCode笔记:Weekly Contest 215 比赛记录

LeetCode笔记:Weekly Contest 215 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 4. 算法优化 0. 赛后总结 这一次的比赛排名的话还算是凑合,国内327,世界830,总算也是在前10%,但是过程真的是呵呵了,整整错了4次,其中有3次都是极其愚蠢的错误,然后最后还提前了半小时放弃了,最后一题真..

codename_cys的博客 1267

用 XCO_CP_XLSX 在 ABAP 中写 Excel:从写入访问到样式控制的完整指南

本文介绍了在 ABAP 环境中使用 XCO_CP_XLSX 模块导出 Excel 报表的完整实践方案。文章从获取写入访问权限开始,详细讲解了基于 row_stream 的批量数据写入和基于 cursor 的精细控制两种方法,并提供了创建新文档、添加工作表、设置样式等关键操作示例。通过分层抽象的工作簿-工作表-单元格模型,开发者可以灵活应对企业应用中常见的报表导出需求,特别是在 SAP BTP 和 S/4HANA Cloud 环境下实现高效可靠的 Excel 文件生成与处理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 161

上岸算法 I LeetCode Weekly Contest 220解题报告

No.1重新格式化电话号码 解题思路 预处理两种特殊符号之后的字符串根据长度 len 分一下三种情况 len % 3 == 0: 直接拼接 len % 3 == 1: 保留最后四位特殊拼接 len % 3 == 2: 保留最后两位特殊拼接 代码展示 class Solution { public String reformatNumber(String number) { if (number == null || number.length() == 0) {

shanganya20的博客 205

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python for i in range(len())_Python for i in range ()用法详解

for i in range ()作用:range()是一个函数, for i in range () 就是给i赋值:比如 for i in range (1,3):就是把1,2依次赋值给irange () 函数的使用是这样的:range(start, stop[, step]),分别是起始、终止和步长range(3)即:从0到3,不包含3,即0,1,2>>> for i in ...

weixin_36477752的博客 4万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python中len()和range()函数

函数:len()1:作用:返回字符串、列表、字典、元组等长度2:语法:len(str)3:参数: str:要计算的字符串、列表、字典、元组等4:返回值:字符串、列表、字典、元组等元素的长度5:实例5.1、计算字符串的长度:>>> s = "hello good boy doiido" >>> len(s) 21 5.2、计算列表的元素个数:>>> l = ['h','e','l','l','o']

十里平湖的博客 6万+

Oracle 执行 DDL 长时间无响应

Oracle数据库上遇到一个很无语的问题。同事告诉我,不能删除某个表的某个索引,其他操作都没问题。看了一下,这个表只有几千条数据,上面有2个组合唯一索引。删除其中的一个唯一索引 SQL> drop index IDX...

cuihuang1302的博客 803

python for i in range(len())_python - Python:for循环 - for i in range(0,len(list)vs i for list in lis...

如果您打开口译员并执行以下操作:help(range)你会得到这个:Help on built-in function range in module __builtin__:range(...)range(stop) -> list of integersrange(start, stop[, step]) -> list of integersReturn a list conta...

weixin_40007804的博客 7684

for循环中列表:for i in range(0, len(f1)): 与 for i in f1的区别

for i in range(0, len(f1)): 与 for i in f1:相等但要注意在应用的时候f1[i]与i的区别。

weixin_37895393的博客 2万+

【Python基础教程】(二):选择结构与循环结构

联系QQ:970586718 博客地址:https://blog.youkuaiyun.com/m0_46521785 选择结构 多分支结构 if (条件A): pass elif (条件B): pass elif (条件C): pass elif ...: pass else: pass 编写程序需要使用多分支的时候不要使用多个if替代,因为可能会在第一个if里改变变量的值导致进入第二个if 实现流程 执行if语句的时候,会先计算条件,判断最后的结果是True还是False,如果是True的话会.

一条小黑龙的博客 4483

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

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

Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation

Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation

codename_cys的博客 3868

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的博客 3302

LeetCode笔记:Weekly Contest 229 比赛记录

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

codename_cys的博客 2467

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笔记:Biweekly Contest 42 比赛记录
Espresso Macchiato
博客等级 码龄6年 2453粉丝 818原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值