📖本篇内容:leetcode每周.周赛第282场周赛 葡萄城专场 ~简单模拟 + 哈希表的应用 + 排序二分缩小范围求最值
📑 文章专栏:leetcode周赛打卡《周周打卡》
📆 最近更新:2022年2月 20日 leetcode每周.周赛第281场周赛 红海游戏专场 ~简单模拟 + 链表数据结构简单应用 + 优先队列的合理使用
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
📖本文目录
🙊写在前面
🙊小付来喽,今天接着有更新周赛栏目了哦,今天小付第7次打单周赛
📆第282场周赛——2022-02-27
📝T1.6008. 统计包含给定前缀的字符串
题目
给你一个字符串数组 words 和一个字符串 pref 。
返回 words 中以 pref 作为 前缀 的字符串的数目。
字符串 s 的 前缀 就是 s 的任一前导连续字符串。
示例
示例1:
输入:words = ["pay","attention","practice","attend"], pref = "at"
输出:2
解释:以 "at" 作为前缀的字符串有两个,分别是:"attention" 和 "attend" 。
示例2:
输入:words = ["leetcode","win","loops","success"], pref = "code"
输出:0
解释:不存在以 "code" 作为前缀的字符串。
提示
1 <= words.length <= 100
1 <= words[i].length, pref.length <= 100
words[i] 和 pref 由小写英文字母组成
⭐思路 ⭐
本题思路以及考察点:
- 字符串模拟,
暴力AC题
代码实现
class Solution {
public int prefixCount(String[] words, String pref) {
int res = 0;
int n = pref.length();
// 遍历字符串数组
for (String s : words){
// 如果当前的字符串长度都小于了前缀字符串长度则跳过
if (s.length() < n)continue;
// 获取当前字符串的前缀长度子串进行比较 记录结果
if (s.substring(0,n).equals(pref))res++;
}
return res;
}
}
执行结果

📝T2.6009. 使两字符串互为字母异位词的最少步骤数
题目
给你两个字符串 s 和 t 。在一步操作中,你可以给 s 或者 t 追加 任一字符 。
返回使 s 和 t 互为 字母异位词 所需的最少步骤数。
字母异位词 指字母相同但是顺序不同(或者相同)的字符串。
示例
示例1:
输入:s = "leetcode", t = "coats"
输出:7
解释:
- 执行 2 步操作,将 "as" 追加到 s = "leetcode" 中,得到 s = "leetcodeas" 。
- 执行 5 步操作,将 "leede" 追加到 t = "coats" 中,得到 t = "coatsleede" 。
"leetcodeas" 和 "coatsleede" 互为字母异位词。
总共用去 2 + 5 = 7 步。
可以证明,无法用少于 7 步操作使这两个字符串互为字母异位词。
示例2:
输入:s = "night", t = "thing"
输出:0
解释:给出的字符串已经互为字母异位词。因此,不需要任何进一步操作。
提示
1 <= s.length, t.length <= 2 * 10^5
s 和 t 由小写英文字符组成
⭐思路 ⭐
本题思路以及考察点:
- 简单的哈希表计数问题,我们可以分别记录字符串1 和 字符串2 中
各个字符串出现的次数。 - 然后我们通过
对每个字符哈希表进行筛选模拟即可
代码实现
class Solution {
public int minSteps(String s, String t) {
// 构建哈希表分别用于记录s字符串和t字符串的各个字符出现的个数
Map<Character,Integer> sMap = new HashMap<>();
Map<Character,Integer> tMap = new HashMap<>();
// 初始化
for (char c : s.toCharArray()){
sMap.put(c,sMap.getOrDefault(c,0)+1);
}
for (char c : t.toCharArray()){
tMap.put(c,tMap.getOrDefault(c,0)+1);
}
// 用于记录结果
int res = 0 ;
for (char c:sMap.keySet()){
// 如果s字符串中的字符在t字符串中出现 且数量相等则跳过当前字符
if (tMap.containsKey(c) && tMap.get(c).equals(sMap.get(c)))continue;
// 如果s中存在该字符而t中不存在该字符 则将出现的该字符以及它的数量添加到t字符哈希表中
if (!tMap.containsKey(c)){
tMap.put(c,sMap.get(c));
// 记录结果
res+=sMap.get(c);
}
// 如果当前存在了相同的字符 则需要添加使得两个字符串中该字符相等数量的字符
if (tMap.containsKey(c)){
res += Math.abs(tMap.get(c) - sMap.get(c));
}
}
// 还需要额外进行遍历一次t字符串 以防t字符串中出现了s中没出现的字符
for (char c : tMap.keySet()){
if (!sMap.containsKey(c)){
sMap.put(c,tMap.get(c));
res+=tMap.get(c);
}
}
return res;
}
}
执行结果

📝T3.6010. 完成旅途的最少时间
题目
给你一个数组 time ,其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。
每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟旅途。每辆公交车 独立 运行,也就是说可以同时有多辆公交车在运行且互不影响。
给你一个整数 totalTrips ,表示所有公交车 总共 需要完成的旅途数目。请你返回完成 至少 totalTrips 趟旅途需要花费的 最少 时间。
示例
示例1:
输入:time = [1,2,3], totalTrips = 5
输出:3
解释:
- 时刻 t = 1 ,每辆公交车完成的旅途数分别为 [1,0,0] 。
已完成的总旅途数为 1 + 0 + 0 = 1 。
- 时刻 t = 2 ,每辆公交车完成的旅途数分别为 [2,1,0] 。
已完成的总旅途数为 2 + 1 + 0 = 3 。
- 时刻 t = 3 ,每辆公交车完成的旅途数分别为 [3,1,1] 。
已完成的总旅途数为 3 + 1 + 1 = 5 。
所以总共完成至少 5 趟旅途的最少时间为 3 。
输入:time = [2], totalTrips = 1
输出:2
解释:
只有一辆公交车,它将在时刻 t = 2 完成第一趟旅途。
所以完成 1 趟旅途的最少时间为 2 。
提示
1 <= time.length <= 10^5
1 <= time[i], totalTrips <= 10^7
⭐思路 ⭐
本题思路以及考察点:
- 我们先来理解一下题意,它是需要让我们求出完成
至少 totalTrips趟旅途需要花费的 最少 时间, 我们可以先将这个车辆行驶时间进行排序通过计算time[0] * totalTrips,从而获得得到 旅途花费的 最多 时间,因为当有其他车辆在花费时间最多之内也能跑完则会使得车次跑完旅途的次数+1。
代码实现
class Solution {
public long minimumTime(int[] time, int totalTrips) {
Arrays.sort(time);
long left = 0;
// 记录当前最大完成旅途的时间
long right = 1L* time[0] * totalTrips ;
// 在最小时间和最大时间之间搜索符合条件的时间
while (left < right ){
long mid = left + (right - left) /2;
// 记录当前完成旅途的车
long trips = 0;
// 遍历每个车次需要完成的时间
for(int t : time){
if(mid < t){
break;
}
// 记录当前时间能完成的趟数
trips += mid / t;
}
// 如果当前完成的车次已经到达了完成的次数则缩小范围 搜索前面时间范围
if(trips >= totalTrips){
right = mid;
} else {
// 反之搜索后面时间范围
left = mid + 1;
}
}
return left;
}
}
执行结果

🙊写在最后
小付打卡的第7场单周赛 2022-02-27
尽可能把会做的题 都做好 就可以了
本次周赛 对了两道题
T3 超时 T4 没有摸到=-=
所以还是很不错的周赛体验
最后
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~

700

被折叠的 条评论
为什么被折叠?



