LeetCode 第420场周赛个人题解

ops/2024/10/25 1:59:44/

目录

 

Q1. 出现在屏幕上的字符串序列

原题链接

思路分析

AC代码

Q2. 字符至少出现 K 次的子字符串 I

原题链接

思路分析

AC代码

Q3. 使数组非递减的最少除法操作次数

原题链接

思路分析

AC代码

Q4. 判断 DFS 字符串是否是回文串

原题链接

思路分析

AC代码


 

Q1. 出现在屏幕上的字符串序列

原题链接

​​​​​​​Q1. 出现在屏幕上的字符串序列

思路分析

模拟

签到题,直接模拟即可

时间复杂度:O(N)

AC代码

python">class Solution:def stringSequence(self, target: str) -> List[str]:res = []s = ""for c in target:x = ord('a')res.append(s + chr(x))while x < ord(c):x += 1res.append(s + chr(x))s += creturn res

Q2. 字符至少出现 K 次的子字符串 I

原题链接

Q2. 字符至少出现 K 次的子字符串 I

思路分析

暴力滑窗

因为数据量很小,赛时不考虑线性做法,直接暴力滑窗即可

时间复杂度:O(N^2)

AC代码

python">class Solution:def numberOfSubstrings(self, s: str, k: int) -> int:n = len(s)s = list(map(ord, s))b = ord('a')res = 0for i in range(n):cnt = [0] * 26for j in range(i, n):cnt[s[j] - b] += 1if cnt[s[j] - b] == k:res += n - jbreakreturn res

 

Q3. 使数组非递减的最少除法操作次数

原题链接

Q3. 使数组非递减的最少除法操作次数

思路分析

素数筛

预处理 值域 的 素数筛,得到 minp[i],代表 i 的最小质因子

然后我们贪心的从后向前考虑,后面越大,前面余地越大

如果nums[i] >= nums[i + 1] 我们就跳过

否则按照题目的要求进行模拟,题目的操作等价于 i = minp[i]

 

时间复杂度:O(n ln n)

AC代码

python">N = 1_000_000minp = [-1] * (N + 1)
primes = []for i in range(2, N + 1):if minp[i] == -1:minp[i] = iprimes.append(i)for p in primes:if p * i > N: breakminp[p * i] = pif p == minp[i]: break    
class Solution:def minOperations(self, nums: List[int]) -> int:n = len(nums)res = 0for i in range(n - 2, -1, -1):if nums[i] <= nums[i + 1]: continuewhile nums[i] > nums[i + 1]:if minp[nums[i]] == nums[i]: return -1nums[i] = minp[nums[i]]res += 1return res

Q4. 判断 DFS 字符串是否是回文串

原题链接

Q4. 判断 DFS 字符串是否是回文串

思路分析

Manacher + dfs

根据题意 我们跑 后序 dfs 得到一个字符串seq,每个子树的 dfsstr 都是 seq 的一个子串

我们对这些子串判断是否是回文串即可

快速判断一个字符串的子串是否是回文串:Manacher算法

详见:Manacher(马拉车)算法详解,原理分析_马拉车算法原理-CSDN博客

时间复杂度:O(N)

AC代码

std::vector<int> manacher(const std::string& s) {std::vector<int> t{0};for (char c : s)t.push_back(c), t.push_back(0);int n = t.size();std::vector<int> r(n);for (int i = 0, j = 0; i < n; ++ i) {if (j + r[j] > i)r[i] = std::min(r[2 * j - i], j + r[j] - i);while (i - r[i] >= 0 && i + r[i] < n && t[i - r[i]] == t[i + r[i]])++ r[i];if (i + r[i] > j + r[j])j = i;}return r;
}
class Solution {
public:vector<bool> findAnswer(vector<int>& parent, string s) {int n = s.size();std::vector<std::vector<int>> adj(n);for (int i = 1; i < n; ++ i) {adj[parent[i]].push_back(i);adj[i].push_back(parent[i]);}std::string seq;std::vector<int> siz(n, 1), dfn(n);int cur = 0;auto dfs = [&](auto &&self, int u) -> void{for (int v : adj[u]) {if (v == parent[u]) continue;self(self, v);siz[u] += siz[v];}seq.push_back(s[u]);dfn[u] = cur ++;};dfs(dfs, 0);auto m = manacher(seq);std::vector<bool> res(n);for (int i = 0; i < n; ++ i) {int r = dfn[i] * 2 + 1, l = (dfn[i] - siz[i] + 1) * 2 + 1;res[i] = m[(l + r) / 2] - 1 >= siz[i];}return res;}
};

 

 


http://www.ppmy.cn/ops/128205.html

相关文章

ReactNative项目根据平台去判断允许用户是热更新还是强更新或者若更新

在 React Native 项目中&#xff0c;根据平台&#xff08;iOS 或 Android&#xff09;来决定是否允许用户进行热更新、强更新或弱更新&#xff0c;通常需要考虑以下几个因素&#xff1a; 平台政策&#xff1a; iOS&#xff1a;App Store 严格限制了热更新的能力&#xff0c;因此…

大数据新视界 --大数据大厂之数据脱敏技术在大数据中的应用与挑战

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

实战:大数据冷热分析

实战&#xff1a;大数据冷热分析 冷热分析&#xff08;Hot and Cold Data Analysis&#xff09;的目的主要在于优化存储系统的性能和成本。通过识别并区分访问频率和存储需求不同的数据&#xff0c;可以采取适当的存储策略&#xff0c;进而提高系统的效率和用户体验。终极目的…

【golang】学习文档整理

Binding | Echo 传值时注意零值和传空的区别 需要validate require 和 设置指针配合使用 保证不同值的返回不同 不能客户端传0值被判断为空 测试时要空值零值去测试字段是否正确返回 返回错误是否符合预期

后端消息推送方案方案(轮询,长轮询,websocket,SSE)

1.轮询&#xff1a; 轮询是一种客户端定期向服务器发送HTTP请求&#xff0c;服务器实时返回数据给浏览器&#xff0c;用以检查是否有新的数据或更新的方式。客户端会设置一个固定的时间间隔&#xff0c;不停地向服务器发起HTTP请求&#xff0c;无论是否有新数据返回&#xff0…

[含文档+PPT+源码等]精品基于springboot实现的原生Andriod临期食品交易系统

基于Spring Boot实现的原生Android临期食品交易系统的背景可以从技术背景、社会与经济背景以及系统开发的必要性三个方面进行详细阐述&#xff1a; 一、技术背景 Spring Boot框架的优势&#xff1a; 快速开发&#xff1a;Spring Boot通过自动配置和简化依赖管理&#xff0c;显…

探索直播美颜SDK技术:视频美颜平台的技术实现解析

本篇文章&#xff0c;小编将深入探讨直播美颜SDK的技术实现&#xff0c;以及其在视频美颜平台中的重要角色。 一、什么是直播美颜SDK&#xff1f; 直播美颜SDK是一套用于实时处理视频图像的工具包&#xff0c;允许开发者集成美颜、滤镜、特效等功能。这些功能不仅提升了用户的…

大衍数列——考研408考试科目之数据算法——未来之窗学习通

一、大衍数列 中国古代文献中&#xff0c;曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。 它的前几项是&#xff1a;0、2、4、8、12、18、24、32、40、50 … 其规律是&#xff1a;对偶数项&#xff0c;是序号平方再除2&#xff0c;奇数项&#xff0c;是…