当前位置: 首页 > news >正文

算法提升——LeetCode第385场周赛总结

题目

统计前后缀下标对 I

给你一个下标从0开始的字符串数组words。

定义一个布尔函数isPrefixAndSuffix,它接受两个字符串参数str1和str2:

当str1同时是str2的前缀(prefix)和后缀(suffix)时,isPrefixAndSuffix(str1,str2)返回true,否则返回false。
例如,isPrefixAndSuffix(“aba”,“ababa”)返回true,因为"aba"既是"ababa"的前缀,也是"ababa"的后缀,但是isPrefixAndSuffix(“abc”,“abcd”)返回false。

以整数形式,返回满足i<j且isPrefixAndSuffix(words[i],words[j])为true的下标对(i,j)的数量。

解题思路

暴力判断每一个字符串是否是开头或结尾,代码如下:

class Solution {public int countPrefixSuffixPairs(String[] words) {int res=0;int len=words.length;for(int i=0;i<len;i++){for(int j=i+1;j<len;j++){if (isPrefixAndSuffix(words[i],words[j])){res++;}}}return res;}public boolean isPrefixAndSuffix(String a,String b){return  b.startsWith(a)&&b.endsWith(a);}}

最长公共前缀长度

给你两个正整数数组arr1和arr2。

正整数的前缀是其最左边的一位或多位数字组成的整数。例如,123是整数12345的前缀,而234不是。

设若整数c是整数a和b的公共前缀,那么c需要同时是a和b的前缀。例如,5655359和56554有公共前缀565,而1223和43456没有公共前缀。

你需要找出属于arr1的整数x和属于arr2的整数y组成的所有数对(x,y)之中最长的公共前缀的长度。

返回所有数对之中最长公共前缀的长度。如果它们之间不存在公共前缀,则返回0。

解题思路

预先处理arr1所有前缀到set中,然后arr2依次判断即可,代码如下:

class Solution {public int longestCommonPrefix(int[] arr1, int[] arr2) {Set<Integer> st = new HashSet<>();for (int x : arr1) {for (; x > 0; x /= 10) {st.add(x);}}int mx = 0;for (int x : arr2) {for (; x > 0 && !st.contains(x); x /= 10) ;mx = Math.max(mx, x);}return mx > 0 ? Integer.toString(mx).length() : 0;}
}

出现频率最高的质数

给你一个大小为mxn、下标从0开始的二维矩阵mat。在每个单元格,你可以按以下方式生成数字:

最多有8条路径可以选择:东,东南,南,西南,西,西北,北,东北。

选择其中一条路径,沿着这个方向移动,并且将路径上的数字添加到正在形成的数字后面。

注意,每一步都会生成数字,例如,如果路径上的数字是1,9,1,那么在这个方向上会生成三个数字:1,19,191。

返回在遍历矩阵所创建的所有数字中,出现频率最高的、大于10的质数;如果不存在这样的质数,则返回-1。如果存在多个出现频率最高的质数,那么返回其中最大的那个。

注意:移动过程中不允许改变方向。

解题思路

对于每个单元格,枚举八个方向,生成数字,统计其中质数个数。代码如下:

class Solution {private static final int[][] DIRS = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};public int mostFrequentPrime(int[][] mat) {int m = mat.length;int n = mat[0].length;Map<Integer, Integer> cnt = new HashMap<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {for (int[] d : DIRS) {int x = i + d[0];int y = j + d[1];int v = mat[i][j];while (x >= 0 && x < m && y >= 0 && y < n) {v = v * 10 + mat[x][y];if (isPrime(v)) {cnt.merge(v, 1, Integer::sum);}x += d[0];y += d[1];}}}}int ans = -1;int maxCnt = 0;for (Map.Entry<Integer, Integer> e : cnt.entrySet()) {int v = e.getKey();int c = e.getValue();if (c > maxCnt) {ans = v;maxCnt = c;} else if (c == maxCnt) {ans = Math.max(ans, v);}}return ans;}private boolean isPrime(int n) {for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return false;}}return true;}
}

统计前后缀下标对 II

给你一个下标从0开始的字符串数组words。

定义一个布尔函数isPrefixAndSuffix,它接受两个字符串参数str1和str2:

当str1同时是str2的前缀(prefix)和后缀(suffix)时,isPrefixAndSuffix(str1,str2)返回true,否则返回false。
例如,isPrefixAndSuffix(“aba”,“ababa”)返回true,因为"aba"既是"ababa"的前缀,也是"ababa"的后缀,但是isPrefixAndSuffix(“abc”,“abcd”)返回false。

以整数形式,返回满足i<j且isPrefixAndSuffix(words[i],words[j])为true的下标对(i,j)的数量。

解题思路

本题跟第一题一致,不过在用暴力法就没办法解决了。可以用字典树解决本题。

class Node {Map<Integer, Node> son = new HashMap<>();int cnt;
}class Solution {public long countPrefixSuffixPairs(String[] words) {long ans = 0;Node root = new Node();for (String S : words) {char[] s = S.toCharArray();int n = s.length;Node cur = root;for (int i = 0; i < n; i++) {int p = (s[i] - 'a') << 5 | (s[n - 1 - i] - 'a');cur = cur.son.computeIfAbsent(p, k -> new Node());ans += cur.cnt;}cur.cnt++;}return ans;}
}

总结

参与了许多周赛,却始终在第三题上遇到瓶颈,难以突破。反复总结经验后发现,虽然题解看起来简单,但亲自动手解决时总是遇到难题,无法顺利通过。为了改进这一状况,在接下来的练习中,我打算从第三题开始着手,以此作为突破口,提升我的解题能力。

相关文章:

算法提升——LeetCode第385场周赛总结

题目 统计前后缀下标对 I 给你一个下标从0开始的字符串数组words。 定义一个布尔函数isPrefixAndSuffix&#xff0c;它接受两个字符串参数str1和str2&#xff1a; 当str1同时是str2的前缀&#xff08;prefix&#xff09;和后缀&#xff08;suffix&#xff09;时&#xff0c…...

【README 小技巧】在项目README.md 中展示发布到maven 仓库版本

在项目README.md 中展示发不到nexus 的快照版本 <p align"center"><a target"_blank" href"https://search.maven.org/search?qwu-lazy-cloud-network%20wu-lazy-cloud-network"><img src"https://img-home.csdnimg.cn/ima…...

R语言【ClusterR】——KMeans_rcpp()

Package ClusterR version 1.3.2 Description 使用RcppArmadillo计算k-means。 Usage KMeans_rcpp(data,clusters,num_init = 1,max_iters = 100,initializer = "kmeans++",fuzzy = FALSE,verbose = FALSE,CENTROIDS = NULL,tol = 1e-04,tol_optimal_init = 0.3,se…...

7-liunx服务器规范

目录 概况liunx日志liunx系统日志syslog函数openlog 可以改变syslog默认输出方式 &#xff0c;进一步结构化 用户信息进程间的关系会话ps命令查看进程关系 系统资源限制改变工作目录和根目录服务器程序后台话 概况 liunx服务器上有很多细节需要注意 &#xff0c;这些细节很重要…...

java序列化之Jackson

当涉及到在Java中进行JSON序列化和反序列化时,Jackson和Gson是两个最常用的库。它们都提供了强大的功能来处理JSON数据,但在某些方面有一些不同之处。 Jackson Jackson 是一个功能强大且灵活的 JSON 处理库,由 FasterXML 维护。以下是 Jackson 的一些特点 强大的功能 Ja…...

服务区智慧公厕

在如今追求智能化、便捷化的社会背景下&#xff0c;高速公路服务区智慧公厕正成为人们关注的焦点。作为高速公路上的必要设施&#xff0c;公厕的提升已经不再局限于简单的清洁卫生&#xff0c;而是更多地涉及到智能化、舒适度和用户体验。本文以智慧公厕源头厂家广州中期科技有…...

mysql数据库 - 统诉

1、DDL - 数据库操作 show databases; create database 数据库名 use 数据库名 select database() drop database 数据库名 2、DDL- 表操作 show tables; create table desc 表名 show create table 表名 alter table 表名 add/modify/change/rename drop table 表名 3、DML …...

Python入门必学:单引号、双引号与三引号的差异与应用

Python入门必学&#xff1a;单引号、双引号与三引号的差异与应用 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得…...

spring缓存的使用

Spring缓存使用 缓存注解 对于Spring&#xff0c;缓存组件例如EhCache是可拔插的&#xff0c;而缓存注解是通用的。 Cacheable 标记在方法或者类上&#xff0c;标识该方法或类支持缓存。Spring调用注解标识方法后会将返回值缓存到redis&#xff0c;以保证下次同条件调用该方…...

交换整数的二进制奇偶位

题目&#xff1a;写一个宏&#xff0c;可以将一个整数的二进制位的奇数位和偶数位交换。 假设我们举例&#xff1a;10 那么他的二进制就是&#xff1a;00000000 00000000 00000000 00001010 交换以后组成的新的数就是 5 怎么用写这个宏呢&#xff1f; 1.分别拿出奇数位和偶数位…...

在做了frp的实验室服务器不同端口间传输文件

背景 实验室有两台服务器&#xff0c;使用的是一个IP&#xff0c;两个端口&#xff0c;给人看上去是一台服务器的两个端口&#xff0c;实际是两台服务器。 现在我需要从一个端口传输一个文件夹到另外一个端口&#xff0c;实际上是从一个机器传输到另外一个机器。 操作 在两台…...

数据结构链表力扣例题AC(3)——代码以及思路记录

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 AC写法一 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//思…...

C++初阶:容器适配器priority_queue常用接口详解及模拟实现、仿函数介绍

介绍完了stack和queue的介绍以及模拟的相关内容后&#xff1a;C初阶&#xff1a;容器适配器介绍、stack和queue常用接口详解及模拟实现 接下来进行priority_queue的介绍以及模拟&#xff1a; 文章目录 1.priority_queue的介绍和使用1.1priority_queue的初步介绍1.2priority_que…...

提取淘宝店铺联系方式的爬虫工具

随着电子商务的快速发展&#xff0c;淘宝成为了许多人购物的首选平台。而对于一些商家来说&#xff0c;获取淘宝店铺的联系方式是非常重要的&#xff0c;以便建立更加直接和有效的沟通渠道。本文将介绍一种基于Python的爬虫工具&#xff0c;可以帮助我们提取淘宝店铺的联系方式…...

Eureka服务搭建

1️⃣搭建服务 引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>启动类加注解 EnableEurekaServer SpringBootApplication public…...

SORA技术报告

文档链接&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …...

Python Web开发记录 Day1:HTML

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、HTML1、前端引入和HTML标签①前端引入②浏览…...

六、回归与聚类算法 - 模型保存与加载

目录 1、API 2、案例 欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、API 2、案例...

Spring事务模板及afterCommit存在的坑

大家好&#xff0c;我是墨哥&#xff08;隐墨星辰&#xff09;。今天的内容来源于两个线上问题&#xff0c;主要和大家聊聊为什么支付系统中基本只使用事务模板方法&#xff0c;而不使用声明式事务Transaction注解&#xff0c;以及使用afterCommit()出现连接未按预期释放导致的…...

【区块链】联盟链

区块链中的联盟链 写在最前面**FAQs** 联盟链&#xff1a;区块链技术的新兴力量**联盟链的定义****联盟链的技术架构**共识机制智能合约加密技术身份认证 **联盟链的特点**高效性安全性可控性隐私保护 **联盟链的应用场景****金融服务****供应链管理****身份验证****跨境支付**…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...