力扣159场周赛[链接][https://leetcode-cn.com/contest/weekly-contest-159/]
一次和大佬打比赛的周日,程序员的周末娱乐活动。HHHH
第一题:签到题
5230. 缀点成线
在一个 XY 坐标系中有一些点,我们用数组 coordinates
来分别记录它们的坐标,其中 coordinates[i] = [x, y]
表示横坐标为 x
、纵坐标为 y
的点。
请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。
示例 1:
1 | 输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]] |
示例 2:
1 | 输入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]] |
提示:
2 <= coordinates.length <= 1000
coordinates[i].length == 2
-10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
coordinates
中不含重复的点
算法分析
做这题时,要注意的就是要注意细节,刚做的时候害怕精度会卡,没有直接计算斜率
存进变量中,让后直接推出方程y=kx+b
就可以了;就这样就可以了!哈哈哈,当时没有特判斜率为0的情况,没想到数据没有卡请两个点的数据,逃过一劫;(某位大佬踩坑了!手动滑稽)
代码
1 | class Solution { |
第二题:set的应用、字符串应用
5231. 删除子文件夹
你是一位系统管理员,手里有一份文件夹列表 folder
,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。
我们这样定义「子文件夹」:
- 如果文件夹
folder[i]
位于另一个文件夹folder[j]
下,那么folder[i]
就是folder[j]
的子文件夹。
文件夹的「路径」是由一个或多个按以下格式串联形成的字符串:
/
后跟一个或者多个小写英文字母。
例如,/leetcode
和 /leetcode/problems
都是有效的路径,而空字符串和 /
不是。
示例 1:
1 | 输入:folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"] |
示例 2:
1 | 输入:folder = ["/a","/a/b/c","/a/b/d"] |
示例 3:
1 | 输入:folder = ["/a/b/c","/a/b/d","/a/b/ca"] |
提示:
1 <= folder.length <= 4 * 10^4
2 <= folder[i].length <= 100
folder[i]
只包含小写字母和/
folder[i]
总是以字符/
起始- 每个文件夹名都是唯一的
算法分析
考察的知识点:
sort
的重载,即自定义排序- 按字符串长度排序
- 字符串的切割
set
容器的应用
基本思路:首先,将给出的字符串数组进行排序操作;然后读取字符串,遇到/
的时候判断,在set
中是否含有s.substring(0,j)
子串,有直接跳过当前字符串,直到最后,没有包含就插入set
中,最后返回set
容器中的元素就完事了;多亏大佬指点才过;主要卡在按字符串长度排序
;
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |
第三题:滑动窗口、双指针
5232. 替换子串得到平衡字符串
有一个只含有 'Q', 'W', 'E', 'R'
四种字符,且长度为 n
的字符串。
假如在该字符串中,这四个字符都恰好出现 n/4
次,那么它就是一个「平衡字符串」。
给你一个这样的字符串 s
,请通过「替换子串」的方式,使原字符串 s
变成一个「平衡字符串」。
你可以用和「待替换子串」长度相同的 任何 其他字符串来完成替换。
请返回待替换子串的最小可能长度。
如果原字符串自身就是一个平衡字符串,则返回 0
。
示例 1:
1 | 输入:s = "QWER" |
示例 2:
1 | 输入:s = "QQWE" |
示例 3:
1 | 输入:s = "QQQW" |
示例 4:
1 | 输入:s = "QQQQ" |
提示:
1 <= s.length <= 10^5
s.length
是4
的倍数s
中只含有'Q'
,'W'
,'E'
,'R'
四种字符
算法描述
按照几步进行:
- 遍历字符串记录
'Q'
,'W'
,'E'
,'R'
字符的个数 - 计算平衡时各个字符的个数,找到要替换哪几个字符以及个数
- 找到包含上面字符的最小窗口
基本思路:首先字符串遍历,计数字符个数,计算目标字符的个数,找到满足条件的窗口,一直遍历到字符串尾部,满足条件时更新最小窗口的大小;我刚开始做的时候没有思路,然后大佬一句点醒,抬手就来;哈哈哈
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |
第四题:树状数组、离散化、动态规划(DP)
太难了
这一题一脸懵逼,自己太菜了,汉奇大佬tql,只想说一句:LHQ牛逼;下面看大佬表演(手动滑稽):
1 | const int maxn=1e6+10; |