LeetCode笔记:Biweekly Contest 35 比赛记录

0. 赛后总结

中文的leetcode果然和我犯冲,这次比赛又是桑心的一逼,题目倒还好,虽然第二第三题卡了一会,但是好歹都做出来了,但是最坑的是第四题居然比赛的时候没做出来,然后比赛结束之后10分钟给搞定了。。。10分钟,就差这10分钟。。。

唉,见鬼了。

整体排名不算差吧,国内前200,世界500多点,但是考虑到双周赛参加的人本来就少,这个成绩就很尴尬了,更何况我就差那么10分钟。。。

算了,不口吐芬芳了,毕竟一晚上过去,也多少看淡了一点,好好梳理一下,然后再接再厉吧。。。

≧ ﹏ ≦

1. 题目一

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

1. 解题思路

第一题的题目算是中规中矩吧,目标是计算奇数长度的连续子序列的总和的总和。

因此,我们只需要进行一个二重循环遍历就行了。

不过,为了更好地提升代码效率,我们可以求出累积数组,而后序列的求和操作就可以直接换算为一个减法操作就可以了,可以省掉一层循环。

2. 代码实现

给出代码实现如下:

class Solution:
    def sumOddLengthSubarrays(self, arr: List[int]) -> int:
        cumsum = [0]
        for n in arr:
            cumsum.append(cumsum[-1] + n)
        n = len(arr)
        ans = 0
        for i in range(n):
            for j in range(i+1, n+1,2):
                s = cumsum[j] - cumsum[i]
                ans += s
        return ans

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

当前最优解耗时32ms,但是看了一下算法思路本身乃至实现都是几乎完全一样的,因此就不再过多赘述了。

2. 题目二

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

1. 解题思路

这一题的算法思路本身还是蛮清晰的,其实就是看requests中所有请求之间的重合部分,并按照重合次数对idx进行排序,然后分别从大到小向其中填充入原数组中的元素即可。

但是,比较难的一点在于如何去实现这个算法,要计算重合次数本身并不是一件很轻松的事。

后来倒是想到了一种个人认为比较巧妙的方法,就是对于每一个requests,在首部+1,尾部-1,而后求整个数组的累积和,这样每个idx中的累积和就是这个idx在requests中被重复请求的次数。

从而,我们只需要对idx进行排序,再对数组进行排序,然后对应元素相乘求和即可得到我们最终的答案。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maxSumRangeQuery(self, nums: List[int], requests: List[List[int]]) -> int:
        MOD = 1000000007
        n = len(nums)
        counter = [0 for i in range(n+1)]
        for st, ed in requests:
            counter[st] += 1
            counter[ed+1] -= 1
        for i in range(1, n+1):
            counter[i] += counter[i-1]
        counter = sorted(counter[:-1])
        nums = sorted(nums)
        ans = 0
        for i in range(n):
            ans = (ans + counter[i] * nums[i]) % MOD
        return ans

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

当前的最优算法耗时1388ms,但是看了一下其算法本身和我们的算法是完全一致的,唯一不同的就是最后的求和过程他用了一个sum函数。

因此,这里也就不在多做赘述了。

3. 题目三

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

1. 解题思路

第三题我在比赛的时候倒是超时了两次,不过结果发现一次是因为读题失误,一次则是因为数据处理上的问题,思路上倒是一直没啥大的问题,所以后来就直接改对了,算是可喜可贺吧,呵呵。

这一题的解题思路其实也是蛮清晰的,要使得整个数组之和最终能够被p整除,那么我们要做的首先就是求出总的数组之和对p得余数,假设为r,如果r为0,说明本身就能够被整除,那么直接返回0即可;反之,就是去找其中每一个元素k,假设sum[:k+1] % p = r',那么需要删除的最短序列长度就是下一个使得sum[:k+l] % p = r' + r的数组长度l。

剩下的问题就是代码实现了。

2. 代码实现

我们给出上述思路的一种python实现算法如下:

import math
import collections

class Solution:
    def minSubarray(self, nums: List[int], p: int) -> int:        
        r = 0
        counter = collections.defaultdict(list)
        counter[0] = [0]
        for idx, n in enumerate(nums):
            r = (r + n) % p
            counter[r].append(idx+1)
        if r == 0:
            return 0
        
        @lru_cache(None)
        def get_min(r1, r2):
            s1 = counter.get(r1, [])
            s2 = counter.get(r2, [])
            n1 = len(s1)
            n2 = len(s2)
            i = 0
            j = 0
            ans = math.inf
            while i < n1:
                while j < n2 and s2[j] < s1[i]:
                    j += 1
                if j == n2:
                    break
                while i < n1 and s1[i] < s2[j]:
                    i += 1
                ans = min(ans, s2[j]-s1[i-1])
            return ans
        
        ans = math.inf
        for i in counter.keys():
            tgt = (i + r) % p
            ans = min(ans, get_min(i, tgt))
        return ans if ans != len(nums) else -1

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

当前的最优算法耗时仅576ms,差不多有一倍的差距,说明上述实现肯定有什么改进的地方。

3. 算法优化

看了一下当前最优的解法,发现思路是一致的,但是他们的统计是计算最近一个和为r'-r的元素,这样就可以少做一次遍历,优化了时间复杂度。

给出他们的代码实现如下:

class Solution:
    def minSubarray(self, nums: List[int], p: int) -> int:     
        n = len(nums)
        r = sum(nums) % p
        if r == 0:
            return 0
        counter = {0: 0}
        ans = n
        s = 0
        for idx, k in enumerate(nums):
            s = (s + k) % p
            tgt = (s - r + p) % p
            if tgt in counter:
                ans = min(ans, idx+1 - counter[tgt])
            counter[s] = idx+1
            # print(counter, ans)
        # print(counter, ans)
        return ans if ans != n else -1

提交代码评测得到:耗时544ms,占用内存32.2MB。为当前最有方案。

4. 题目四

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

1. 解题思路

这一题真的可惜了,比赛的时候没能解出来,但实际上这一题并没有很难,思路对了的话花不了太多的时间。

这一题真的可惜了,比赛的时候没能解出来,但实际上这一题并没有很难,思路对了的话花不了太多的时间。

事实上,这一题的思路就是反向画回去,从最顶层的图层开始绘制,一直绘制到不能绘制为止。

首先,我们找到每一种颜色的原始绘制区域,然后,看他是否属于当前的最顶层图层,如果是,那么将其上色,反之就先等等。如果能够一直绘制到底,将所有的颜色都涂上,那么就说明可以实现,反之就说明不能绘制。

2. 代码实现

给出代码实现如下:

class Solution:
    def isPrintable(self, grid: List[List[int]]) -> bool:
        n = len(grid)
        m = len(grid[0])
        colors = {}
        for i in range(n):
            for j in range(m):
                if grid[i][j] not in colors:
                    colors[grid[i][j]] = [i, j, i, j]
                else:
                    colors[grid[i][j]] = [min(colors[grid[i][j]][0], i), min(colors[grid[i][j]][1], j), max(colors[grid[i][j]][2], i), max(colors[grid[i][j]][3], j)]
        colors = colors.items()
        
        painted = [[0 for _ in range(m)] for _ in range(n)]
        
        def is_paintable(block):
            c, (x1, y1, x2, y2) = block
            for i in range(x1, x2+1):
                for j in range(y1, y2+1):
                    if painted[i][j] == 0 and grid[i][j] != c:
                        return False
            return True
        def paint(blocks):
            nonlocal painted
            c, (x1, y1, x2, y2) = block
            for i in range(x1, x2+1):
                for j in range(y1, y2+1):
                    if painted[i][j] == 0:
                        painted[i][j] = c
            return
        
        flag = True
        while flag and colors != []:
            tmp = []
            flag = False
            for block in colors:
                if is_paintable(block):
                    paint(colors)
                    flag = True
                else:
                    tmp.append(block)
            colors = tmp
        
        return flag

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

当前最优算法耗时224ms,差了差不多一半的时间,如果有兴趣的读者可以自行去看一下,这里我就暂时不做什么研究了。。。

AI大模型探索之路-应用篇11:AI大模型应用智能评估(Ragas) 随着人工智能技术的飞速发展,AI大模型(LLM)已经成为了推动技术创新和应用的关键因素。这些大模型在语言理解、图像识别、自然语言生成等领域展现出了惊人的能力。然而,随着模型规模的增大,它们对计算资源的消耗、环境适应性、模型稳定性、安全性和可解释性等方面也提出了新的挑战。因此,对AI大模型进行智能评估变得至关重要,以确保它们在实际应用中的稳定性、可靠性和有效性。本文将详细介绍Ragas框架,一个专为AI大模型设计的智能评估工具。 阅读详情

相关推荐

SoC低功耗设计实战:28nm工艺下四核A7的Hierarchical Flow全流程解析

本文深入解析了在TSMC 28nm工艺上,采用Hierarchical Flow(层次化流程)实现四核Cortex-A7 SoC低功耗设计的全流程。文章从项目背景切入,详细探讨了基于UPF的电源规划、时钟树综合、接口时序收敛以及物理验证等关键环节,分享了使用Cadence Innovus等工具进行低功耗物理实现的实战经验与挑战。

weixin_29231263的博客 324

LeetCode笔记:Biweekly Contest 44 比赛记录

LeetCode笔记:Biweekly Contest 44 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 又是只做出两题的一天,唉,心累成疾,不过所幸结果还算勉勉强强,不至于太过丢人吧,唉…… 1. 题目一 给出题目一的试题链接如下: 5645. 找到最高海拔 1. 解题思路 这一题没啥好说的,根..

codename_cys的博客 227

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7283

LeetCode笔记:Biweekly Contest 32 比赛记录

LeetCode笔记:Biweekly Contest 32 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 3. 算法优化 0. 赛后总结 这一次的比赛结果依然是中规中矩,35分钟搞定了3题,然后很不幸的错了两次,但是总排名还算是OK,千名以内,果然双周比赛的时间点选的太尴尬,大晚上的参赛的人数比较少。。。 看了一下大..

codename_cys的博客 302

炉石传说游戏系统拆解和部分系统分析

一.游戏综述 《炉石传说:魔兽英雄传》是一款由暴雪娱乐公司出品的策略类卡牌游戏。中国大陆地区的独家运营由网易公司代理。2014年3月13日全球同步正式运营。游戏背景设定于暴雪的魔兽系列,共十位魔兽中的角色作为十种不同的职业。而玩家要做的,就是根据己方现有的卡牌组建合适的卡组,指挥英雄,驱动随从,施展法术,与游戏好友或素不相识的对手一决高下。 二.游戏系统拆解图 三.游戏系统部分分析 1. 对战系统 (1)战斗准备 炉石传说开始前都需要配置至少30张卡牌作为出战卡组 .....

Jimmy72236的博客 4926

VMware Workstation Pro必备技巧:5分钟搞定Ubuntu虚拟机磁盘瘦身(附常见错误解决)

本文详细介绍了如何为VMware Workstation Pro中的Ubuntu虚拟机进行磁盘瘦身,解决.vmdk文件只增不减的问题。通过清理系统垃圾、使用零填充空闲空间,并利用vmware-toolbox-cmd或vmware-vdiskmanager工具进行压缩,可有效回收被无效占用的磁盘空间。文章还提供了常见错误解决方案和预防性维护建议,帮助用户高效管理虚拟机存储。

sea99的博客 297

LeetCode笔记:Biweekly Contest 34 比赛记录

LeetCode笔记:Biweekly Contest 34 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 0. 赛后总结 不知道是不是错觉,双周赛感觉是要比周赛多少简单一点,这一次的题目又是全部搞定了,总共耗时52分钟,不过错了两次,因此最终的成绩在1h,很可惜的刚好跑出了全国前100(102名),全球的成绩则为26..

codename_cys的博客 314

排查单片机不工作的‘玄学’故障:从LDO选型、复位电路到焊接不良的完整避坑指南

本文深入剖析单片机不工作的常见硬件故障,从LDO选型、复位电路设计到PCB布局和焊接工艺,提供系统性排查方法。重点分析3.3V电源稳定性、LDO动态响应特性及复位电路设计要点,帮助工程师快速定位和解决嵌入式系统中的'玄学'故障,提升产品可靠性。

weixin_30655569的博客 387

LeetCode笔记:Biweekly Contest 100

LeetCode笔记:Biweekly Contest 100

codename_cys的博客 293

深度学习之基于Pytorch手指静脉识别系统(

一、项目背景与目标手指静脉识别技术是一种新兴的生物特征识别技术,它依据人类手指中流动的血液可吸收特定波长的光线这一科学原理,利用手指内的静脉分布图像来进行身份识别。与传统的生物识别技术(如指纹识别)相比,手指静脉识别技术具有不易伪造、识别精度高、非接触性等特点,因此在安全性要求较高的场景(如金融、医疗、公安等)具有广阔的应用前景。本项目旨在利用PyTorch深度学习框架,构建一套高效、准确的手指静脉识别系统。

Q1744828575的博客 832

手把手教你用 Cursor 写一个完整的 Web 应用(含前后端 + 部署)

本文介绍如何利用Cursor AI工具从零开发一个完整的全栈待办事项Web应用。文章针对开发者常见痛点——无法独立完成项目闭环,提供了一套AI驱动的全栈开发范式。通过Vue3+Node.js+MySQL技术栈,全程由Cursor自动生成项目架构、前后端代码、数据库设计,并解决联调、部署等关键问题。重点展示了如何用AI完成:项目规划与架构设计、后端接口开发、前端页面实现、跨域联调、打包优化及云端部署全流程。该方法将传统需要3-5天的开发工作压缩至1小时内完成,产出规范可上线的项目,特别适合想突破"碎

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 634

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

锁的艺术:Java并发中的常用锁策略与实践

对java锁相关内容进行整理分析:乐观锁 VS 悲观锁+自旋锁 VS 适应性自旋锁+无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁+公平锁 VS 非公平锁+可重入锁 VS 非可重入锁+独享锁 VS 共享锁

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 171万+

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation

Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation

codename_cys的博客 3868

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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
上一篇: Python笔记:matplotlib 三维图表绘制方法简介
下一篇: LeetCode笔记:Weekly Contest 207 比赛记录
Espresso Macchiato
博客等级 码龄7年 2453粉丝 818原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值