Leetcode 第 385 场周赛题解

Leetcode 第 385 场周赛题解

  • Leetcode 第 385 场周赛题解
    • 题目1:3042. 统计前后缀下标对 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3043. 最长公共前缀的长度
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3044. 出现频率最高的质数
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3045. 统计前后缀下标对 II
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 385 场周赛题解

题目1:3042. 统计前后缀下标对 I

思路

暴力枚举下标为 i 和 j 的字符串 words[i] 和 words[j],当满足条件:

words[i] == words[j].substr(0, words[i].size()) && words[i] == words[j].substr(words[j].size() - words[i].size()) 时,

计数器 count++,最后返回 count。

代码

/** @lc app=leetcode.cn id=3042 lang=cpp** [3042] 统计前后缀下标对 I*/// @lc code=start
class Solution
{
public:int countPrefixSuffixPairs(vector<string> &words){if (words.empty())return 0;int n = words.size(), count = 0;for (int i = 0; i < n - 1; i++)for (int j = i + 1; j < n; j++){int len1 = words[i].size(), len2 = words[j].size();if (len1 <= len2)if (words[i] == words[j].substr(0, len1) &&words[i] == words[j].substr(len2 - len1))count++;}return count;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n2),其中 n 是数组 words 的元素个数。

空间复杂度:O(1)。

题目2:3043. 最长公共前缀的长度

思路

数字不好比较前缀,把它们转换成字符串再进行比较。

将数组 arr1 的元素的所有前缀插入到一个字符串集合 strSet 中,遍历数组 arr2 的元素 x,转换成字符串 s,取 s 的前缀在集合中搜索,若找到,更新最长公共前缀的长度。

最后返回最大值即可。

代码

/** @lc app=leetcode.cn id=3043 lang=cpp** [3043] 最长公共前缀的长度*/// @lc code=start
class Solution
{
public:int longestCommonPrefix(vector<int> &arr1, vector<int> &arr2){set<string> strSet;for (int &x : arr1){string s = to_string(x);for (int i = 1; i <= s.length(); i++)strSet.insert(s.substr(0, i));}int ans = 0;for (int &x : arr2){string s = to_string(x);for (int len = 1; len <= s.length(); len++){string temp = s.substr(0, len);if (strSet.count(temp))ans = max(ans, len);}}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O((n+m)log2U),,其中 n 为数组 arr1 的长度,m 为数组 arr2 的长度,U 为数组元素的最大值。

空间复杂度:O(nlog2U),,其中 n 为数组 arr1 的长度,U 为数组元素的最大值。

题目3:3044. 出现频率最高的质数

思路

对于每个单元格,枚举八个方向,生成数字,用一个哈希表统计其中质数个数。

最后返回出现次数最多的质数,如果有多个这样的质数,返回最大的那个。

代码

/** @lc app=leetcode.cn id=3044 lang=cpp** [3044] 出现频率最高的质数*/// @lc code=start
class Solution
{
private:const int dx[8] = {-1, -1, -1, 1, 1, 1, 0, 0};const int dy[8] = {0, -1, 1, 0, -1, 1, -1, 1};public:int mostFrequentPrime(vector<vector<int>> &mat){if (mat.empty())return 0;int m = mat.size(), n = m ? mat[0].size() : 0;unordered_map<int, int> cnt;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)for (int k = 0; k < 8; k++){int r = i + dx[k], c = j + dy[k], v = mat[i][j];// 只统计大于 10 的质数// if (isPrime(v))//     cnt[v]++;while (r >= 0 && r < m && c >= 0 && c < n){v = 10 * v + mat[r][c];if (isPrime(v))cnt[v]++;r += dx[k];c += dy[k];}}int ans = -1, maxCount = 0;for (auto &[num, count] : cnt){if (count > maxCount){ans = num;maxCount = count;}else if (count == maxCount)ans = max(ans, num);}return ans;}// 辅函数 - 判断数字 n 是否是质数bool isPrime(int n){for (int i = 2; i * i <= n; i++){if (n % i == 0)return false;}return true;}
};
// @lc code=end

复杂度分析

时间复杂度:O(mnk*10k/2),其中 m 和 n 分别为 mat 的行数和列数,k=max(m,n)。总共有 O(mnk) 个数,判断质数需要 O(10k/2) 的时间。

空间复杂度:O(mnk),其中 m 和 n 分别为 mat 的行数和列数,k=max(m,n)。

题目4:3045. 统计前后缀下标对 II

思路

在这里插入图片描述

将这个列表哈希化:idx = (s[i] - ‘a’) * 26 + (s[j] - ‘a’)。

枚举 t=words[j],怎么统计有多少个 s=words[i] 是 t 的前缀?

这可以用字典树解决,在遍历 words 的同时,维护每个字符串的出现次数。当我们遍历 t 时,同时遍历字典树上的对应节点,并把 t 插入字典树。

代码

/** @lc app=leetcode.cn id=3045 lang=cpp** [3045] 统计前后缀下标对 II*/// @lc code=start// 字典树class Solution
{
public:struct Trie{unordered_map<int, Trie *> childs;int cnt = 0;};Trie *trie = new Trie();void add(const string &s){Trie *cur = trie;int n = s.size();for (int i = 0, j = n - 1; i < n; ++i, --j){int idx = (s[i] - 'a') * 26 + (s[j] - 'a');if (!cur->childs.count(idx)){cur->childs[idx] = new Trie();}cur = cur->childs[idx];cur->cnt += 1;}}int query(const string &s){Trie *cur = trie;int n = s.size();for (int i = 0, j = n - 1; i < n; ++i, --j){int idx = (s[i] - 'a') * 26 + (s[j] - 'a');if (!cur->childs.count(idx))return 0;cur = cur->childs[idx];}return cur->cnt;}long long countPrefixSuffixPairs(vector<string> &words){int n = words.size();long long ans = 0;for (int i = n - 1; i >= 0; --i){ans += query(words[i]);add(words[i]);}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(L),其中 L 为所有 words[i] 的长度之和。

空间复杂度:O(L),其中 L 为所有 words[i] 的长度之和。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498185.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EFK】基于K8S构建EFK+logstash+kafka日志平台

基于K8S构建EFKlogstashkafka日志平台 一、常见日志收集方案1.1、EFK1.2、ELK Stack1.3、ELK filbeat1.4、其他方案 二、EFK组件介绍2.1、Elasticsearch组件2.2、Filebeat组件【1】 Filebeat和beat关系【2】Filebeat是什么【3】Filebeat工作原理【4】传输方案 2.3、Logstash组件…

本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法

aiboco团队荣获本届挑战赛季军。该团队来自亿阳信通。 方案介绍 本届挑战赛采用开放式赛题&#xff0c;基于建行云龙舟运维平台的稳定性工具和多维监控系统&#xff0c;模拟大型的生活服务APP的生产环境&#xff0c;提供端到端的全链路的日志、指标和调用链数据。参赛队伍在组…

操作系统:IO管理概述

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f3c6;&#x1f3c6;本文完整PDF源文件请翻阅至文章底部下载。&#x1f3c6;&#x1f3c6; 1 I/O设备的基本概念与分类1.1 总览1.2 什么是IO设备1.3 IO设备的分类1…

yolov8涨点技巧,添加SwinTransformer注意力机制,提升目标检测效果

目录 摘要 SwinTransformer原理 代码实现 YOLOv8详细添加步骤 ymal文件内容 one_swinTrans three_swinTrans 启动命令 完整代码分享 摘要 Swin Transformer通过引入创新的分层注意力机制展现了其架构的独特性&#xff0c;该机制通过将注意力区域划分为块并在这些块内执…

NutUI + taro +vue 开发遇到的问题 使用popup组件 内部元素滚动遇到的的问题

1 popup 弹出内容时 弹出的框内元素数据很长需要滚动时 本地可以正常滚动 打包成小程序后无法滚动 如这样的免责条款内容 代码如下 解决办法 1 把2处的单位换成百分比 弹框能滚动但是 是popup 里面所有的元素都一起滚动 导致标题都滚走了 2 scroll-y 改成&#xff1a; :scrol…

Spring Task的应用

介绍 Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a; 定时任务框架 作用&#xff1a; 定时自动执行某段Java代码 应用场景&#xff1a; 引用卡每月还款提醒、银行贷款每月还款提醒、火车票售票系统处理未支…

Vulnhub内网渗透Masashi-1靶场通关

完整内容见我的博客xzajyjs.cn 靶场下载地址。 下载下来后是 .vmdk 格式&#xff0c;vm直接导入。 M1请使用UTM进行搭建&#xff0c;教程见此。该靶场可能出现网络问题&#xff0c;解决方案见此 信息搜集 arp-scan -l # 主机发现&#xff0c;目标位192.168.168.14 nmap -sV …

单片机SWJ 调试端口(SW-DP和JTAG)、SWD下载电路

单片机下载接口是指用于将编写好的程序代码下载到单片机芯片中的接口。常见的单片机下载接口包括以下几种&#xff1a; 1. **串口下载接口**&#xff1a;通过串口&#xff08;如UART或RS-232接口&#xff09;与计算机或下载器相连&#xff0c;将程序代码通过串口传输到单片机内…

为高频大功率设计的双面水冷厚膜电阻方案

EAK双面水冷厚膜电阻是一种具有良好散热性能的电阻器&#xff0c;常用于需要高效散热的电子设备中。其包括第一绝缘介质层、厚膜电阻层、第二绝缘介质层以及用于液体流通的金属腔体&#xff0c;第一绝缘介质层设置于金属腔体的上表面&#xff1b;第一绝缘介质层表面设有厚膜电阻…

行政区划代码 powerquery

https://www.mca.gov.cn/n156/n186/index.html 选中删除其他列 if [末尾4位] "0000" then [单位名称] else if [末尾4位] <> "0000" and Text.End([末尾4位],2) "00" then [单位名称] else null if [结尾字符] "0000" then …

Docker部署ROS程序

【先上干货】 1、docker安装 curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh# ubuntu系统可以直接通过apt安装 sudo apt-get install -y docker.io 2、给docker一个root权限 sudo usermod -aG docker $USER3、启动docker服务 # service 命令…

spring boot学习第十三篇:使用spring security控制权限

该文章同时也讲到了如何使用swagger。 1、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…