[LeetCode周赛复盘] 第 314 场周赛20221009

news/2024/9/8 4:31:09/

[LeetCode周赛复盘] 第 314 场周赛20221009

    • 一、本周周赛总结
    • 二、 [Easy] 6201. 找出前缀异或的原始数组
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、[Easy] 6200. 处理用时最长的那个任务的员工
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、[Medium] 6202. 使用机器人打印字典序最小的字符串
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 五、[Hard] 6203. 矩阵中和能被 K 整除的路径
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现

一、本周周赛总结

  • 国庆补班没打,午休时VP了一下,打的也不好。
  • T4虽然是套路DP,但卡了半天,DP还是短板啊。

二、 [Easy] 6201. 找出前缀异或的原始数组

链接: 6201. 找出前缀异或的原始数组

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 给出前缀和找原数组,那么求差分数组即可。
  • python3.10之后可以pairwise一行搞定,VP时没想那么多。

3. 代码实现

class Solution:def findArray(self, pref: List[int]) -> List[int]:n = len(pref)arr = [pref[0]]*nfor i in range(1,n):arr[i] = pref[i]^pref[i-1]return arr

三、[Easy] 6200. 处理用时最长的那个任务的员工

链接: 6200. 处理用时最长的那个任务的员工

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 题面是真滴长!
  • 还读错一次题,幸好case没过。
  • 实际是看最长的那个任务谁干的,pairwise即可。

3. 代码实现

class Solution:def hardestWorker(self, n: int, logs: List[List[int]]) -> int:        s = 0mx = -1ans = inffor i,lv in logs:t= lv - sif t > mx:ans = imx = tif t == mx:ans = min(ans,i)s = lvreturn ans

四、[Medium] 6202. 使用机器人打印字典序最小的字符串

链接: 6202. 使用机器人打印字典序最小的字符串

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 本题是经典贪心:求字典序最小的出栈序列。
  • 用贪心栈解决。
  • 顺序遍历原数据,对每个字符压栈。
  • 考虑栈顶字符c在后续的情况,设后续串中最小字符是m,那么有两种情况:
    1. 如果c>m,那么显然优先出m才是最优解。这样的话继续向后遍历到m出m,途径的字符全部压栈即可。
    1. 如果c<=m,那么可以直接出c,因为后续不会有更优解。
  • 以上对栈顶的操作应该while做。

  • 如何判断后续元素的最小值呢。
  • 正常操作是DP预处理每个位置后续的最小值,倒序dp,f[i] = min(s[i],f[i+1]) ,初始f[n] = 'z’即可。
  • 这样f[i]代表s[i:]中的最小值,求第i个位置之后的最小值就是f[i+1].
  • 这题由于值域比较小26,VP时也没多想,直接用Counter+双指针做了。
  • Counter的好处是省一点内存,坏处是比较麻烦,因为要字符转下标;而且双指针比较烧脑。

3. 代码实现

dp预处理

class Solution:def robotWithString(self, s: str) -> str:n = len(s)f = ['z']*(n+1)  # 每个字符后边最小的字符是谁for i in range(n-1,-1,-1):f[i]  = min(s[i],f[i+1])ans = []      st = []for i,c in enumerate(s):st.append(c)while st and st[-1] <= f[i+1]:ans.append(st.pop())ans.extend(st[::-1])return ''.join(ans)

counter预处理

class Solution:def robotWithString(self, s: str) -> str:cnt = [0]*26for c in s:cnt[ord(c)-ord('a')] += 1ans = []j = 0st = []for c in s:while j < 26 and cnt[j]==0:j+=1while st and ord(st[-1]) <= j+ord('a'):ans.append(st.pop())if ord(c) == j + ord('a'):ans.append(c)else:st.append(c)cnt[ord(c)-ord('a')] -= 1j = 0ans.extend(st[::-1])return ''.join(ans)

五、[Hard] 6203. 矩阵中和能被 K 整除的路径

链接: 6203. 矩阵中和能被 K 整除的路径

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 压轴了一道套路DP,在事先读过题面的情况下,还是卡了20min,感觉自己真的蠢。
  • 读错一次题,幸好case没过。。题目要求了起点终点,因此路径数直接转移即可,没有中途点作为终点起点的情况。
  • 看到m*n<=5e4本来觉得记忆化搜索过不了的,于是还是写了代码较多的DP,没想到力扣对py还是很友好,加个cache_clear就能过。下次写记忆化建议无脑加clear(或看看数据量)。
  • 这里提一嘴,由于py的默认栈深限制是1000,对于这题显然过不了,力扣应该是修改了栈深参数,我通过print(sys.getrecursionlimit())在本题验证了一下,结果是550000。
  • 在别的平台上,如果手动开到这么大,应该会爆MLE,力扣400兆左右的内存是允许的。。但无脑cache显然也是MLE了,在lccn上显示的是超时实际是个bug,同样的代码在lcus上显示的是MLE。

  • 回到这题,每个位置显然只能从左或者上转移而来,这题要对k整除,也就是对k取模是0,那么如果终点是x,显然转移来的位置(左和上)需要的当前状态是(k-x)%x。
  • 因此我们的状态应该占个维度,即当前和对k取模都能是多少,实际本题路径坐标已经有两维了,因此总共是三维。
  • 转移:f[i][j][v] = f[i-1][j][(v-grid[i][j])%k) +f[i][j-1][(v-grid[i][j])%k)
  • 初始:f[0][0][grid[0][0]%k] = 1,其他是0
  • ans:f[m-1][n-1][0]

3. 代码实现

记忆化搜索+cache_clear

class Solution:def numberOfPaths(self, grid: List[List[int]], k: int) -> int:MOD = 10**9+7m,n = len(grid),len(grid[0])@cachedef f(i,j,mod):if i == j == 0:return int(grid[0][0]%k == mod%k)ans = 0if i:ans += f(i-1,j,(mod-grid[i][j])%k)if j :ans += f(i,j-1,(mod-grid[i][j])%k)return ans%MODans = f(m-1,n-1,k)f.cache_clear()# print(sys.getrecursionlimit())return ans

滚动优化DP

class Solution:def numberOfPaths(self, grid: List[List[int]], k: int) -> int:MOD = 10**9+7m,n = len(grid),len(grid[0])f = [[0]*k for _ in range(n)] f[0][grid[0][0]%k] = 1for i in range(m):g = ff = [[0]*k for _ in range(n)] for j in range(n):if i == j == 0:f[0][grid[0][0]%k]=1continuefor x in range(k):if i:f[j][x] += g[j][(x-grid[i][j])%k]if j:f[j][x] += f[j-1][(x-grid[i][j])%k]f[j][x]%=MOD                                   return f[-1][0]%MOD            

朴素DP

class Solution:def numberOfPaths(self, grid: List[List[int]], k: int) -> int:MOD = 10**9+7m,n = len(grid),len(grid[0])f = [[[0]*k for _ in range(n)] for _ in range(m)]f[0][0][grid[0][0]%k] = 1for i in range(m):for j in range(n):if i == j == 0:continuefor x in range(k):if 0<=i-1<m and 0<=j<n:f[i][j][x] += f[i-1][j][(x-grid[i][j])%k]if 0<=i<m and 0<=j-1<n:f[i][j][x] += f[i][j-1][(x-grid[i][j])%k]f[i][j][x]%=MODreturn f[-1][-1][0]%MOD         

http://www.ppmy.cn/news/310751.html

相关文章

AndroidApp学习笔记

Android 发展历程 Android 是一个基于Linux 内核的自由及开发源代码的操作系统 2005 年 8 月由Google收购注资2007年11月发布Android的源代码2008 年10月第一部Android智能手机发布&#xff0c;HTC公司制造2011年 Android 位于世界第一2013 Android 系统数量达到10亿台 App运…

Android 控件 - TextView

1、TextView https://www.bilibili.com/video/BV13y4y1E7pF?p3 1.1、layout_width、layout_height match_parent&#xff1a;表示让当前控件的大小和父布局的大小一样&#xff0c;也就是由父布局来决定当前控件的大小 wrap_content&#xff1a;表示让当前的控件大小能够刚好…

Android登陆页面

文章目录 一、案例演示二、项目构造三、实现代码1、activity_main.xml2、button_pressed_text.xml3、button_pressed_text2.xml4、colors.xml5、图片6、MainActivity.java 一、案例演示 整个屏幕分为四个模块&#xff0c;由上到下logo第一模块&#xff0c;手机号密码第二模块&…

Adongua的算法模板

文章目录 Adongua的算法模板⭐如何根据数据范围判断大致时间复杂度一、STL1.set2.priority_queue3.STL建堆4.vector5.二分查找&#xff1a;upper_bound与lower_bound6.pbds平衡树7.unique函数8.stringstream解决一行不知道输入多少个数的输入问题9.判断字母大小写及数字 二、数…

实现主页面的布局以及界面的切换_AndroidStudio学习笔记(5)

AndroidStudio学习笔记4 一、主界面的布局&#xff0c;布局的嵌套1、布局管理器的类型&#xff1a;2、布局管理器嵌套的要求&#xff1a;3、实例&#xff08;1&#xff09;根布局管理器为线性布局管理器&#xff08;2&#xff09;线性布局管理器内部嵌套相对布局管理器 二、单击…

【SemiDrive源码分析】【驱动BringUp】37 - LCM 驱动 Bringup 流程

【SemiDrive源码分析】【驱动BringUp】37 - LCM 驱动 Bringup 流程 一、RTOS侧 LCM驱动移植1.1 修改safety-x9plus-ref-serdes.mk:用于添加屏驱动文件夹1.2 修改 dil2-safety-x9plus-ref-serdes.mk: DIL2 中也会用到屏1.3 修改屏驱动文件夹名1.4 修改 c 文件名及对应的结构体…

C++ 建造者模式

简述 建造者模式(Builder Pattern),旨在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 | 版权声明:一去、二三里,未经博主允许不得转载。 模式结构 UML 结构图: Builder(抽象建造者):为创建一个产品对象的各个部件指定抽象接口。C…

Android开发学习【简单控件】

Android开发学习【Day01】 Android onCreate 详解简单控件文本显示设置文本内容方式设置文本的大小设置文本的颜色 设置视图的宽高直接设置在代码中设置视图宽高 设置视图间距设置视图的对齐方式线性布局LinearLayout线性布局内部的各视图的两种排列方式线性布局的权重 相对布局…

android res目录资源使用说明

一、颜色 颜色资源应该位于标签下&#xff0c;路径res/values/colors.xml。 名字可以随意定义value&#xff0c;如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <resources> <color name"white">#FFFFFF</colo…

信息学奥赛一本通(C++版) 第三部分 数据结构 第四章 图论算法

总目录详见&#xff1a;https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通&#xff08;C版&#xff09; 第三部分 数据结构 第四章 图论算法 http://ybt.ssoier.cn:8088/ 第一节 图的遍历 //1341 【例题】一笔画问题 //在想&#xff0c;是输出欧拉…

Android应用开发(6)文本视图(TextView)

Android应用开发学习笔记——目录索引 本章介绍文本视图&#xff08;TextView&#xff09;的显示&#xff0c;包括&#xff1a;设置文本内容、设置文本大小、设置文本显示颜色。 一、设置TextView显示内容 Layout XML文件中设置 如&#xff1a;res/layout/activity_main.xml中通…

Android开发TextView+LinearLayout实现底部导航栏

一、 成果 安卓开发底部导航栏的实现是基础内容&#xff0c;今天简单介绍一下用TextViewLinearLayout实现底部导航栏&#xff0c;先放一下成果 二、 代码部分 activity_main.xml将主界面部分做好&#xff0c;部分解释一下&#xff0c;Layout_weight的属性是设置它所占据屏幕的权…

AcWing算法提高课 Level-3 第三章 图论

单源最短路的建图方式 1129. 热浪 思路 &#xff1a;单源最短路算法中除了bellmanford一般不用以外&#xff0c;普D为 O ( n 2 ) O(n^2) O(n2)&#xff0c;优D为 O ( m ∗ l o g n ) O(m*logn) O(m∗logn)&#xff0c;spfa平均是 O ( m ) O(m) O(m)语法 &#xff1a;链式前向星…

Android(三)原生开发基本知识

文章目录 一、基本认识1、目的&#xff1a;实现业务逻辑&#xff0c;生成可用apk2、打开Android Studio&#xff08;[环境搭建](https://blog.csdn.net/liangwenrong/article/details/78307601)&#xff0c;[目录结构讲解](https://blog.csdn.net/liangwenrong/article/details…

Matlab实现遗传算法仿真(附上20个仿真源码)

遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种基于生物进化理论的优化算法&#xff0c;通过模拟自然界中的遗传过程&#xff0c;来寻找最优解。 在遗传算法中&#xff0c;每个解被称为个体&#xff0c;每个个体由一组基因表示&#xff0c;每个基因是…

浏览器跨域请求

跨域是浏览器的一种同源策略&#xff0c;所以该概念只存在于通过浏览器访问服务里。 如果缺少了同源策略&#xff0c;则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的&#xff0c;浏览器只是针对同源策略的一种实现 请求的url地址,必须与浏览器上的…

更改电脑屏幕为护眼模式

http://iknow.lenovo.com/detail/dc_147976.html 转载于:https://www.cnblogs.com/wth21-1314/p/11277705.html

学c语言 pr用什么电脑配置,【答疑】学习python需要怎样的电脑配置? - 视频教程线上学...

lumion 9.0需要电脑配置 2019-03-08 浏览量&#xff1a;11497 提问者&#xff1a;小曼 回答&#xff1a; 下面是我大力推荐的一套lumion 9.0的电脑配置&#xff0c;预算大概一万左右&#xff0c;运行起来毫无压力。CPUIntel&#xff1a;酷睿i7 8700CPU主频&#xff1a;3.200 最…

网吧台式计算机配置,2017网吧电脑配置

如今的网吧已经逐渐与乌烟瘴气脱清了干系&#xff0c;专业、华丽&#xff0c;赋予玩家身临其境的体验&#xff0c;正是不少专业级游戏网吧为玩家们赋予的美妙体验。下面就让学习啦小编给大家带来一份2017网吧电脑配置清单&#xff0c;希望对大家有帮助。 2017网吧电脑配置清单 …

计算机设备自动关机,终于发现电脑自动关机的原因及解决方法

经常使用电脑的朋友们,可能有遇到与我同样的尴尬问题,那就是电脑在使用过程中突然就自动关机 ,给我们的工作学习造成了非常大的困扰,下面是电脑自动关机的原因及解决方法,欢迎参考。 电脑自动关机的原因及解决方法 1、有可能是BIOS的设置问题,进入BIOS里恢复默认设置或把…