LeetCode笔记:Biweekly Contest 31 比赛记录

无人机飞控技术最详细解读 已剪辑自: https://zhuanlan.zhihu.com/p/64519280[导读]被称作是“飞行器的大脑”的飞控到底是什么?以前,搞无人机的十个人有八个是航空、气动、机械出身,更多考虑的是如何让飞机稳定飞起来、飞得更快、飞得更高。如今,随着芯片、人工智能、大数据技术的发展,无人机开始了智能化、终端化、集群化的趋势,大批自动化、机械电子、信息工程、微电子的专业人材投入到了无人机研发大潮中,几年的时间让无人机从远离人们视野的军事应用飞入了寻常百姓家、让门外汉可以短暂的学习也能稳定可靠的飞行娱乐。不可 阅读详情

0. 赛后总结

赛前坦率说是想通过Biweekly Contest找点自信的,结果他喵的又是做的一塌糊涂,成绩惨不忍睹,满心的郁闷挤压在心中,连觉都睡不好,简直了。

坦率地说,这次的比赛就做题来说事实上是没有犯太大的错误的,前三题都搞定了,而且纯粹花在这三题上的时间事实上也并没有很多,可能30多40分钟的样子吧,不是什么很好的成绩,但终究不至于沦落到最后这么个悲惨的结果。

最终成绩这么差的原因更多的还是在于比赛技巧上的失败,因为我在第二题没有一下子想清楚实现细节的情况下就用了暴力解法,导致超时,超时之后也没有第一时间去把后来的解法中的思路去想清楚,而是先去做了第三第四题,虽然第三题没啥问题一次搞定了,第四题却成功地掉进了题目的陷进中,不断地在暴力求解然后优化,殊不知根本思路上错误之后无论如何优化也无法达到答案要求的 O ( N ) O(N) O(N)的时间复杂度,徒劳的浪费了大量的时间。

另外,以后leetcode这种算时间的比赛还是老老实实用python吧,自己做题用c就用c了,但是打比赛的时候用c真的debug起来太麻烦了。。。

whatever,只能说,吃一堑长一智吧,虽然都快吃的撑了。。。

回归到这次比赛的题目本身,这次的题目整体上来说就是完全凭巧劲,题目理解透彻了,解题思路正确了,那么做题就是分分钟的事,无论是最开始easy的题目还是最后一题hard的题目,事实上都特别简单,但关键就是你得花点心思去把问题想清楚,不要埋头就是干。。。

下面,我们就来分别给出各题的求解思路以及实现代码吧。

1. 题目一

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

1. 解题思路

这题作为一道easy题目,本身不会有太大的难度,无非就是统计一下闭区间中的奇数个数而已,因此,我们只需要按照如下规则实现算法即可:

  1. 如果闭区间包含2N个数字,则奇数的数目为N;
  2. 如果闭区间包含2N+1个数字,则分情况讨论:
    1. 如果第一个数字为奇数,则奇数数字数目为N+1;
    2. 反之,若第一个数字为偶数,则奇数数字数目为N;

2. 代码实现

给出代码实现如下:

int countOdds(int low, int high){
    if((high - low + 1) % 2 == 0){
        return (high - low + 1) / 2;
    }
    else if(low % 2 == 1){
        return (high - low + 1) / 2 + 1;
    }
    else{
        return (high - low + 1) / 2;
    }
}

上述代码实现提交之后测评得到:耗时0ms,占用内存5.1MB。

2. 题目二

题目二的试题链接如下:

1. 解题思路

坦率地说,这题一看就是基于奇偶性的动态规划题目,解法一定是先求解每个元素的前面所有元素的累计值,然后通过分析这些累计值的奇偶性得到最终的答案。

可惜在第一时间做这题的时候一下子没能想清楚后面这个对应关系,想着反正就是一道medium的题目,暴力求解估计也能搞定,反正也就 O ( N 2 ) O(N^2) O(N2)的时间复杂度,应该也不至于超时。

然后,然后就没有然后了。。。

脸好疼。。。

下面,我们给出正确的解法思路如下:

  1. 给出list中每一个元素前面所有的元素总和,得到一个cumsum列表;
  2. 对上述cumsum列表,分析其中每一个元素的前方所有元素的奇数个数与偶数个数;
  3. 对于每一个元素,我们分情况讨论:
    1. 如果到该元素的累计总和为奇数,则以该元素为终点的合法子串数目为cumsum列表中其前方的偶数元素个数;
    2. 如果到该元素的累计总和为偶数,则以该元素为终点的合法子串数目为cumsum列表中其前方的奇数元素个数;

这一解法的时间复杂度为 O ( N ) O(N) O(N)。

当然,上述算法依然可以在细节上进行更进一步的优化,比如:

  1. 在第一步的求和中,事实上我们只需要知道其奇偶性就行了,没有必要真的求和;
  2. 这三个步骤可以在同一个for循环中一起实现,因为他们之间没有前后的交错依赖关系;

但是,为了使得代码尽可能地可读,这里,我们不再进行后续的优化。

2. 代码实现

给出上述思路下的代码实现如下:

class Solution:
    def numOfSubarrays(self, arr: List[int]) -> int:
        MOD = 1000000007
        
        cumsum = [0]
        for n in arr:
            cumsum.append(cumsum[-1] + n)
        
        n = len(arr)
        odd = [0] * (n+1)
        even = [0] * (n+1)
        for i in range(n):
            if cumsum[i] % 2 == 0:
                even[i+1] = even[i] + 1
                odd[i+1] = odd[i]
            else:
                even[i+1] = even[i]
                odd[i+1] = odd[i] + 1

        ans = 0
        for i in range(1, n+1):
            if cumsum[i] % 2 == 0:
                ans += odd[i]
            else:
                ans += even[i]
        return ans % MOD

提交上述代码之后得到评测结果:耗时1572ms,占用内存24MB。

而当前提交的最优实现的耗时为1204ms,大致看了一下它的代码,思路和我们差不多,但是比我们做了更多细节上的优化。

3. 题目三

题目三的试题链接如下:

1. 解题思路

这道题就没有什么技巧可言,按照题目的意思求出以每个元素为切分点时前方和后方的字符集合数量即可。

2. 代码实现

给出代码实现如下:

class Solution:
    def numSplits(self, s: str) -> int:
        n = len(s)

        preset = set()
        prenum = [0] * n
        for i in range(n):
            preset.add(s[i])
            prenum[i] = len(preset)

        postset = set()
        postnum = [0] * n
        for i in range(n-1, -1, -1):
            postset.add(s[i])
            postnum[i] = len(postset)

        ans = 0
        for i in range(n-1):
            if prenum[i] == postnum[i+1]:
                ans += 1
        return ans

提交代码之后得到评测结果如下:耗时176ms,占用内存15.8MB。

而当前的最优代码耗时164ms,并没有太过显著的差异。

4. 题目四

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

1. 解题思路

这道题是比赛的时候把我坑的最惨的一题,第一眼看过去感觉只要按照题目的思路做就完事了,做完之后发现超时,然后想着有没有优化的空间,然后一看代码,诶,还真有,然后就优化,还优化了两次,结果两次优化之后依然超时,直到整个比赛结束还在努力地优化代码的细节,完全没觉得哪里有问题。

然后,到优化到实在优化不动了之后,去看了一下为啥头几名的大佬做这题的时间居然只有几分钟,然后发现,他们的代码居然他喵的只有不到10行,而且看了之后就是秒懂的程度,顿时整个人都是崩溃的!!!

总而言之,言而总之,这道题,千万千万千万不要按照题目的讲解方式去暴力的一层一层去处理,那样的时间复杂度是在 O ( N × H ) O(N \times H) O(N×H)这个量级(N为列的数目,H为最高的列高度),虽然我们可以通过通过一些操作来大量的进行剪枝操作,但是感觉应该是不可能达到 O ( N ) O(N) O(N)的时间复杂度的。

下面,废话不多说,直接给出大佬们的解法思路如下:

  1. 考察第一列,假设这一列高度为n,则无论如何我们都得通过n次操作来达到这一高度;
  2. 考察其后方的每一列的高度:
    1. 如果这一列高度低于前一列的高度,那么说明当前一列已经被消除时,这一列的高度一定是可以通过停在某一次中间过程中达到的;
    2. 如果这一列的高度高于前一列的高度,那么假设两者的高度差为m,则我们在通过一系列操作达到了上一列的高度之后,还需要m次额外的操作来达到这一列的高度,即总的操作次数需要加上m。

通过这种解题思路,我们可以直接将时间复杂度降低至 O ( N ) O(N) O(N),而且其代码实现也异常的简单,真的是被大佬们打击的体无完肤。

2. 代码实现

下面,我们给出上述解法的代码实现,嗯,只有区区几行代码而已。。。

int max(int x, int y){
    return x > y ? x : y;
}

int minNumberOperations(int* target, int targetSize){
    int ans = target[0];
    for(int i=0; i<targetSize-1; ++i){
        ans += max(target[i+1] - target[i], 0);
    }
    return ans;
}

提交后得到评测数据如下:耗时160ms,占用内存12.8MB。

基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95 三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀 阅读详情

相关推荐

信捷CODESYS平台伺服电机转矩控制模式应用与切换

信捷CODESYS二次开发软件:XS Studio 在运动控制中的转矩控制案例

weixin_64614866的博客 1万+

LeetCode笔记:Biweekly Contest 81

LeetCode笔记:Biweekly Contest 81

codename_cys的博客 339

别再纠结高边低边了!用TI BQ76952设计两轮车BMS,手把手教你选对架构(附电路图)

本文深度解析基于TI BQ76952芯片的电动两轮车BMS设计策略,涵盖高边/低边驱动选择、四种基础架构的电流路径分析及选型决策矩阵。通过实战案例分享,帮助工程师优化BMS架构,提升系统可靠性和成本效益,特别适合电摩和共享单车应用场景。

weixin_42665255的博客 514

LeetCode笔记:Biweekly Contest 96

LeetCode笔记:Biweekly Contest 96

codename_cys的博客 882

UWB灵犀遥控器方案介绍

UWB灵犀指向遥控器的技术原理和方案介绍

xiongdauwb的博客 3899

手把手教你用RMII接口配置以太网PHY芯片(附YT8512实战代码)

本文详细介绍了如何使用RMII接口配置以太网PHY芯片,以国产YT8512为例,提供从硬件设计到软件驱动的全流程实战指南。内容包括RMII接口技术解析、YT8512硬件设计要点、驱动开发实战代码及常见问题排查,帮助开发者快速实现以太网通信功能。

mac99的博客 996

LeetCode笔记:Biweekly Contest 99

LeetCode笔记:Biweekly Contest 99

codename_cys的博客 463

每周技巧tc 问题处理技巧Teamcenter

(内部)Dataset和Tool相关之2.1——Tool轮询Contents Type和Type Name-赖良顺.docx。(内部)Dataset和Tool相关之3.2——编写Batch和Perl为客户端自动注册相关内容-赖良顺.docx。(内部)Dataset和Tool相关之1.1——Tools和Datasets参数定义-赖良顺.docx。(内部)Dataset和Tool相关之1.2——相关首选项定义及修改-赖良顺.docx。(内部)Dataset和Tool相关之0——概述-赖良顺.docx。

TC技术专栏 1230

LeetCode笔记:Biweekly Contest 82

LeetCode笔记:Biweekly Contest 82

codename_cys的博客 436

光学测量仿真软件:Zygo_(12).Zygo软件的用户界面与操作指南

Zygo软件支持用户自定义工具和插件,以扩展软件的功能和适应特定的仿真需求。编写脚本使用Python或其他支持的脚本语言编写自定义工具的脚本。例如,编写一个脚本来计算光束的衍射效率。# 示例脚本:计算光束的衍射效率 import zygo # 导入Zygo软件的API def calculate_diffraction_efficiency(wavelength , grating_period , angle) : """计算光束的衍射效率:param wavelength: 光源波长(单位:米)

kkchenjj的博客 1669

小众但实用:Python爬取钉钉/企业微信消息,实现办公数据自动化采集(完整版)

钉钉/企业微信的办公数据自动化采集,属于「小众但极度实用」的Python技巧——它不像爬虫爬取电商/网页数据那样被广泛关注,但能直接解决职场人的「刚需痛点」,把每天1-2小时的手动数据整理工作,变成「一键自动化完成」。这套技巧的核心价值,不在于「技术有多高深」,而在于「能真正落地、能真正提升效率」—— 几行简单的Python代码,就能解放双手,让你从繁琐的重复工作中解脱出来,专注于更有价值的核心工作。更重要的是:所有的技术和代码,都是基于「合规合法」的前提,守住了技术的底线,也守住了职场的原则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1931

LeetCode笔记:Biweekly Contest 84

LeetCode笔记:Biweekly Contest 84

codename_cys的博客 212

超详细教程YoloV8官方推荐免费数据集网站Roboflow一键导出Voc、COCO、Yolo、Csv等格式

YoloV8官方推荐了一个数据集网站,就是Roboflow。Roboflow是一个数据集管理平台,提供了免费的数据集,同时也支持上传自己的数据集进行格式转换。使用Roboflow,开发者可以方便地获取所需格式的数据集,无需手动转换格式。此外,Roboflow还提供了多种数据预处理、数据增强等功能,可帮助开发者更好地优化训练数据

Snu77的博客 2万+

LeetCode笔记:Biweekly Contest 104

LeetCode笔记:Biweekly Contest 104

codename_cys的博客 295

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode第20场双周赛(Biweekly Contest 20)解题报告

哦吼吼,AK的双周赛,总体来说还是简单的,主要思路要跟得上,先做的第四题,才回来做第三题,第三题卡了很一会儿,还是有点可惜(其实是得了便宜还卖乖,哈哈哈 第一题:排序。 第二题:模拟。 第三题:双指针。 第四题:组合数学。 详细题解如下。 1.根据数字二进制下 1 的数目排序(Sort Integers By The Number of 1 Bits) AC代...

Mikchy的博客 626

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

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
上一篇: Python笔记:外部参数传入考察(一)argparse库
下一篇: LeetCode笔记:Weekly Contest 199 比赛记录
Espresso Macchiato
博客等级 码龄7年 2453粉丝 818原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值