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

leecode-C语言实现-28. 找出字符串中第一个匹配项的下标

一、题目

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1

示例 1:

输入:haystack = "sadbutsad", needle = "sad"

输出:0

解释:"sad" 在下标 0 和 6 处匹配。

第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:

输入:haystack = "leetcode", needle = "leeto"

输出:-1

解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。

提示:

  • 1 <= haystack.length, needle.length <= 10**4

  • haystack 和 needle 仅由小写英文字符组成

二、解题思路

这里可以用两种方法进行解题,一种是BF算法(暴力搜索算法),算法时间复杂度为O(n*m),另一种是KMP算法(BF算法改进),算法时间复杂度为O(n+m)。这里我们用KMP算法进行解题,最好结合着《三、函数介绍》来看。

在进行字符串匹配之前,我们需要算出模式串的前缀表,也就是算出模式串从第一个字符到倒数第二字符的最长公共前后缀。如下图:

我们可以根据第一个A来推导AB,再来推导ABA的最长公共前后缀,推导方法为:

  1. A只有一个,最长公共前后缀:0。

  1. AB,新增字符B,A和B不相等,最长公共前后缀:0。

  1. ABA,新增字符A,A和A相等,最长公共前后缀:1。

  1. ABAB,新增字符B,B和B(上一个最长公共前后缀:1为索引位的值为B)相等,最长公共前后缀:2。

  1. ABABC,新增字符C,C和A(上一个最长公共前后缀:2为索引位的值为A)不相等,这时需要计算前两位AB和后两位BC是否相等,不相等,最长公共前后缀:0。

  1. ABABCA,新增字符A,A和A(上一个最长公共前后缀:0,所以直接和头部的A比较)相等,最长公共前后缀:1。

  1. ABABCAB,新增字符B,B和B(上一个最长公共前后缀:1为索引位的值为B)相等,最长公共前后缀加一变为:2。

  1. ABABCABA,新增字符A,A和A(上一个最长公共前后缀:2为索引位的值为A)相等,最长公共前后缀加一变为:3。

再在前缀表的前面加-1主要是为了方便计算,就到了最终版前缀表。

前缀表PrefixTable,主串索引PrimaryStrIndex,模式串索引SubStrIndex,从0开始匹配,当匹配到4号索引位时和主串字符不同,SubStrIndex由4变为PrefixTable[4]也就是2,模式串的2号索引位为A,相等和主串索引4号位A,继续匹配。

当匹配到PrimaryStrIndex=6,SubStrIndex=4时,又不想等,将SubStrIndex置为PrefixTable[4]也就是2,模式串的2号索引位为A,相等和主串索引6号位A,继续匹配,发现全部匹配上,就OK了。

三、函数介绍

1、GetPrefixTable

(1)用途

给出字符串StrArray及其长度StrArrayLen,返回一个int类型的前缀表数组。

(2)源码

int* GetPrefixTable(char* StrArray, size_t StrArrayLen)
{int* PrefixTable        = (int*)malloc(sizeof(int) * StrArrayLen);PrefixTable[0]          = -1;if(StrArrayLen == 1){return PrefixTable;}PrefixTable[1]          = 0;size_t StrArrayIndex    = 1;size_t PrefixTableIndex;size_t i = 0;for(PrefixTableIndex = 2; PrefixTableIndex<StrArrayLen; PrefixTableIndex++,StrArrayIndex++){//printf("PrefixTableIndex : %ld, StrArrayIndex : %ld, PrefixTable[PrefixTableIndex-1] : %d\n",PrefixTableIndex,StrArrayIndex,PrefixTable[PrefixTableIndex-1]);if(PrefixTable[PrefixTableIndex-1] == 0) //如果前缀表的上一位的值为0,说明没有公共前后缀。{//printf("StrArray[0] : %c, StrArray[StrArrayIndex] : %c\n",StrArray[0], StrArray[StrArrayIndex]);if(StrArray[0] == StrArray[StrArrayIndex]) //判断第一个字符和新子串最后一位是否相等。{PrefixTable[PrefixTableIndex] = 1;}else{PrefixTable[PrefixTableIndex] = 0;}}else{//printf("StrArray[PrefixTable[PrefixTableIndex-1]] : %c, StrArray[StrArrayIndex] : %c\n",StrArray[PrefixTable[PrefixTableIndex-1]],StrArray[StrArrayIndex]);if(StrArray[PrefixTable[PrefixTableIndex-1]] == StrArray[StrArrayIndex])//判断上一个公共前缀最大长度的后一位和新子串最后一位是否相等。{PrefixTable[PrefixTableIndex] =  PrefixTable[PrefixTableIndex-1] + 1;}else{for(i=0; i<PrefixTable[PrefixTableIndex-1]; i++)//需要循环判断上一个公共前缀的每个字符和新子串的相应字符是否相等。如果上一个公共前缀最大长度是2,字符串aacaaa,那就需要判断前两个a和后两个a是否相等。{if(StrArray[i] != StrArray[StrArrayIndex-PrefixTable[PrefixTableIndex-1]+1+i]){PrefixTable[PrefixTableIndex] = 0;break;}}if(i == PrefixTable[PrefixTableIndex-1]){PrefixTable[PrefixTableIndex] =  PrefixTable[PrefixTableIndex-1];}}}//printf("PrefixTable[%ld] = %d\n",PrefixTableIndex,PrefixTable[PrefixTableIndex]);//printf("=====================\n");}return PrefixTable;
}

(3)参数

参数名

描述

StrArray

char*类型StrArray字符串。

StrArrayLen

size_t类型的StrArray长度。

2、KmpSearch

(1)用途

在主串PrimaryStr搜索第Times次出现的模式串SubStr,返回SubStr的首字符在PrimaryStr的索引位。如果匹配失败返回-1。

(2)源码

int KmpSearch(char* PrimaryStr, char* SubStr, int Times)
{if(PrimaryStr == NULL || SubStr == NULL){return -1;}if(Times < 1){return -1;}size_t      PrimaryStrLen = strlen(PrimaryStr);size_t      SubStrLen     = strlen(SubStr);if(SubStrLen > PrimaryStrLen){return -1;}else if(SubStrLen == PrimaryStrLen){if(strcmp(SubStr,PrimaryStr) == 0){return 0;}else{return -1;}}long long PrimaryStrIndex = 0;long long SubStrIndex     = 0;int Cnt                   = 0;//匹配次数和Times对应。 int* PrefixTable          = GetPrefixTable(SubStr, SubStrLen);PrintArray(PrimaryStr, PrimaryStrLen, sizeof(char));PrintArray(SubStr, SubStrLen, sizeof(char));PrintArray(PrefixTable, SubStrLen, sizeof(int));while(PrimaryStrIndex < PrimaryStrLen){if(PrimaryStr[PrimaryStrIndex] == SubStr[SubStrIndex]){PrimaryStrIndex++;SubStrIndex++;if(SubStrIndex == SubStrLen){Cnt++;if(Cnt == Times){return PrimaryStrIndex - SubStrIndex;}SubStrIndex--;SubStrIndex = PrefixTable[SubStrIndex];}}else{SubStrIndex = PrefixTable[SubStrIndex];if(SubStrIndex == -1){PrimaryStrIndex++;SubStrIndex++;}}}free(PrefixTable);return -1;
}

(3)参数

参数名

描述

PrimaryStr

char*类型主串。

SubStr

char*类型模式串。

Times

匹配第几次

四、虚机测试源码

# include<stdio.h>
# include<string.h>
# include<stdlib.h>int* GetPrefixTable(char* StrArray, size_t StrArrayLen);
int KmpSearch(char* PrimaryStr, char* SubStr, int Times);
void PrintArray(void* Array, size_t ArrayLen, size_t TypeFlag);int main()
{char* PrimaryStr = "ABABABABCABAAB";char* SubStr     = "ABABCABAA";printf("Position : %d\n",KmpSearch(PrimaryStr, SubStr, 1));return 0;
}int* GetPrefixTable(char* StrArray, size_t StrArrayLen)
{int* PrefixTable        = (int*)malloc(sizeof(int) * StrArrayLen);PrefixTable[0]          = -1;if(StrArrayLen == 1){return PrefixTable;}PrefixTable[1]          = 0;size_t StrArrayIndex    = 1;size_t PrefixTableIndex;size_t i = 0;for(PrefixTableIndex = 2; PrefixTableIndex<StrArrayLen; PrefixTableIndex++,StrArrayIndex++){//printf("PrefixTableIndex : %ld, StrArrayIndex : %ld, PrefixTable[PrefixTableIndex-1] : %d\n",PrefixTableIndex,StrArrayIndex,PrefixTable[PrefixTableIndex-1]);if(PrefixTable[PrefixTableIndex-1] == 0) //如果前缀表的上一位的值为0,说明没有公共前后缀。{//printf("StrArray[0] : %c, StrArray[StrArrayIndex] : %c\n",StrArray[0], StrArray[StrArrayIndex]);if(StrArray[0] == StrArray[StrArrayIndex]) //判断第一个字符和新子串最后一位是否相等。{PrefixTable[PrefixTableIndex] = 1;}else{PrefixTable[PrefixTableIndex] = 0;}}else{//printf("StrArray[PrefixTable[PrefixTableIndex-1]] : %c, StrArray[StrArrayIndex] : %c\n",StrArray[PrefixTable[PrefixTableIndex-1]],StrArray[StrArrayIndex]);if(StrArray[PrefixTable[PrefixTableIndex-1]] == StrArray[StrArrayIndex])//判断上一个公共前缀最大长度的后一位和新子串最后一位是否相等。{PrefixTable[PrefixTableIndex] =  PrefixTable[PrefixTableIndex-1] + 1;}else{for(i=0; i<PrefixTable[PrefixTableIndex-1]; i++)//需要循环判断上一个公共前缀的每个字符和新子串的相应字符是否相等。如果上一个公共前缀最大长度是2,字符串aacaaa,那就需要判断前两个a和后两个a是否相等。{if(StrArray[i] != StrArray[StrArrayIndex-PrefixTable[PrefixTableIndex-1]+1+i]){PrefixTable[PrefixTableIndex] = 0;break;}}if(i == PrefixTable[PrefixTableIndex-1]){PrefixTable[PrefixTableIndex] =  PrefixTable[PrefixTableIndex-1];}}}//printf("PrefixTable[%ld] = %d\n",PrefixTableIndex,PrefixTable[PrefixTableIndex]);//printf("=====================\n");}return PrefixTable;
}int KmpSearch(char* PrimaryStr, char* SubStr, int Times)
{if(PrimaryStr == NULL || SubStr == NULL){return -1;}size_t      PrimaryStrLen = strlen(PrimaryStr);size_t      SubStrLen     = strlen(SubStr);if(SubStrLen > PrimaryStrLen){return -1;}else if(SubStrLen == PrimaryStrLen){if(strcmp(SubStr,PrimaryStr) == 0){return 0;}else{return -1;}}long long PrimaryStrIndex = 0;long long SubStrIndex     = 0;int Cnt                   = 0;//匹配次数和Times对应。 int* PrefixTable          = GetPrefixTable(SubStr, SubStrLen);PrintArray(PrimaryStr, PrimaryStrLen, sizeof(char));PrintArray(SubStr, SubStrLen, sizeof(char));PrintArray(PrefixTable, SubStrLen, sizeof(int));while(PrimaryStrIndex < PrimaryStrLen){if(PrimaryStr[PrimaryStrIndex] == SubStr[SubStrIndex]){PrimaryStrIndex++;SubStrIndex++;if(SubStrIndex == SubStrLen){Cnt++;if(Cnt == Times){return PrimaryStrIndex - SubStrIndex;}SubStrIndex--;SubStrIndex = PrefixTable[SubStrIndex];}}else{SubStrIndex = PrefixTable[SubStrIndex];if(SubStrIndex == -1){PrimaryStrIndex++;SubStrIndex++;}}}free(PrefixTable);return -1;
}void PrintArray(void* Array, size_t ArrayLen, size_t TypeFlag)
{size_t i;printf("Array    : ");for(i = 0; i < ArrayLen; i++){switch(TypeFlag){case sizeof(int)  : printf("%d ",((int*)Array)[i]); break;case sizeof(char) : printf("%c ",((char*)Array)[i]); break;default : printf("Unknow Type!!!\n" );}}printf("\n==================================\n");
}

五、虚机测试

[gbase@czg2 LinearTable_String_KMP]$ make
gcc -Wall -g KmpSearch.c -o Test_KmpSearch [gbase@czg2 LinearTable_String_KMP]$ ./Test_KmpSearch 
Array    : A B A B A B A B C A B A A B 
==================================
Array    : A B A B C A B A A 
==================================
Array    : -1 0 0 1 2 0 1 2 3 
==================================
Position : 4

六、Leecode提交源码

int* GetPrefixTable(char* StrArray, size_t StrArrayLen);
int KmpSearch(char* PrimaryStr, char* SubStr, int Times);int strStr(char * haystack, char * needle){return KmpSearch(haystack, needle, 1);
}int* GetPrefixTable(char* StrArray, size_t StrArrayLen)
{int* PrefixTable        = (int*)malloc(sizeof(int) * StrArrayLen);PrefixTable[0]          = -1;if(StrArrayLen == 1){return PrefixTable;}PrefixTable[1]          = 0;size_t StrArrayIndex    = 1;size_t PrefixTableIndex;int i = 0;for(PrefixTableIndex = 2; PrefixTableIndex<StrArrayLen; PrefixTableIndex++,StrArrayIndex++){//printf("PrefixTableIndex : %ld, StrArrayIndex : %ld, PrefixTable[PrefixTableIndex-1] : %d\n",PrefixTableIndex,StrArrayIndex,PrefixTable[PrefixTableIndex-1]);if(PrefixTable[PrefixTableIndex-1] == 0) //如果前缀表的上一位的值为0,说明没有公共前后缀。{//printf("StrArray[0] : %c, StrArray[StrArrayIndex] : %c\n",StrArray[0], StrArray[StrArrayIndex]);if(StrArray[0] == StrArray[StrArrayIndex]) //判断第一个字符和新子串最后一位是否相等。{PrefixTable[PrefixTableIndex] = 1;}else{PrefixTable[PrefixTableIndex] = 0;}}else{//printf("StrArray[PrefixTable[PrefixTableIndex-1]] : %c, StrArray[StrArrayIndex] : %c\n",StrArray[PrefixTable[PrefixTableIndex-1]],StrArray[StrArrayIndex]);if(StrArray[PrefixTable[PrefixTableIndex-1]] == StrArray[StrArrayIndex])//判断上一个公共前缀最大长度的后一位和新子串最后一位是否相等。{PrefixTable[PrefixTableIndex] =  PrefixTable[PrefixTableIndex-1] + 1;}else{for(i=0; i<PrefixTable[PrefixTableIndex-1]; i++){if(StrArray[i] != StrArray[StrArrayIndex-PrefixTable[PrefixTableIndex-1]+1+i]){PrefixTable[PrefixTableIndex] = 0;break;}}if(i == PrefixTable[PrefixTableIndex-1]){PrefixTable[PrefixTableIndex] =  PrefixTable[PrefixTableIndex-1];}}}//printf("PrefixTable[%ld] = %d\n",PrefixTableIndex,PrefixTable[PrefixTableIndex]);//printf("=====================\n");}return PrefixTable;
}int KmpSearch(char* PrimaryStr, char* SubStr, int Times)
{if(PrimaryStr == NULL || SubStr == NULL){return -1;}size_t      PrimaryStrLen = strlen(PrimaryStr);size_t      SubStrLen     = strlen(SubStr);if(SubStrLen > PrimaryStrLen){return -1;}else if(SubStrLen == PrimaryStrLen){if(strcmp(SubStr,PrimaryStr) == 0){return 0;}else{return -1;}}long long PrimaryStrIndex = 0;long long SubStrIndex     = 0;int Cnt                   = 0;//匹配次数和Times对应。 int* PrefixTable          = GetPrefixTable(SubStr, SubStrLen);//PrintArray(PrimaryStr, PrimaryStrLen, sizeof(char));//PrintArray(SubStr, SubStrLen, sizeof(char));//PrintArray(PrefixTable, SubStrLen, sizeof(int));while(PrimaryStrIndex < PrimaryStrLen){if(PrimaryStr[PrimaryStrIndex] == SubStr[SubStrIndex]){PrimaryStrIndex++;SubStrIndex++;if(SubStrIndex == SubStrLen){Cnt++;if(Cnt == Times){return PrimaryStrIndex - SubStrIndex;}SubStrIndex--;SubStrIndex = PrefixTable[SubStrIndex];}}else{SubStrIndex = PrefixTable[SubStrIndex];if(SubStrIndex == -1){PrimaryStrIndex++;SubStrIndex++;}}}free(PrefixTable);return -1;
}void PrintArray(void* Array, size_t ArrayLen, size_t TypeFlag)
{size_t i;printf("Array    : ");for(i = 0; i < ArrayLen; i++){switch(TypeFlag){case sizeof(int)  : printf("%d ",((int*)Array)[i]); break;case sizeof(char) : printf("%c ",((char*)Array)[i]); break;default : printf("Unknow Type!!!\n" );}}printf("\n==================================\n");
}

七、Leecode通过截图

相关文章:

leecode-C语言实现-28. 找出字符串中第一个匹配项的下标

一、题目给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。示例 1&#xff1a;输入&#xff1a;haystack …...

使用 Postman 实现 API 自动化测试

目录&#xff1a;导读 背景介绍 名词解析 使用说明 执行 API 测试 集成 CI 实现 API 自动化测试 写在最后 背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉&#xff0c;对于开发人员和测试人员而言&#xff0c;使用 postman 来编写和保存测试用例会是一种比…...

k8s环境jenkins发布vue项目指定nodejs版本

k8s环境jenkins发布vue项目指定nodejs版本1、背景2、分析3、解决方法3.1、 找到配置镜像位置3.2、 制作新镜像3.3、 推送镜像到私有仓库3.4、 修改配置文件1、背景 发布一个前端项目&#xff0c;它需要nodejs 16.9.0版本支持&#xff0c;而kubesphere 3.2.0集成的jenkins 的镜…...

我应该把毕业设计做到什么程度才能过关?

本篇博客包含了狗哥多年职业生涯对于软件项目的一丢丢理解&#xff0c;也讲述了对于大学生毕业设计的一些理解。如果你还是懵懵懂懂就要离开学校了&#xff0c;被老师告知不得不做出一套毕业设计的时候&#xff0c;希望你可以看到这篇博客&#xff0c;让你有点头绪&#xff0c;…...

力扣-合作过至少三次的演员和导演

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1050. 合作过至少三次的演员和导演二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运…...

【 PMU】信号生成、采样、分割、估计器应用和误差计算(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

电子技术——AB类输出阶的偏置

电子技术——AB类输出阶的偏置 下面我们介绍两种AB类输出阶的偏置的方法。 使用二极管偏置 下图展示了电流源 III 加两个二极管的偏置方法&#xff1a; 因为输出阶需要大功率输出&#xff0c;因此输出推挽三极管可能是几何体积比较大的晶体管。对于二极管来说&#xff0c;并不…...

元宇宙营业厅,数字技术融合,赋能实体经济

在我国数字经济与虚拟服务市场规模扩大下&#xff0c;元宇宙营业厅强势来袭&#xff0c;从多场景、多内容&#xff0c;深耕高效协同的特色功能&#xff0c;基于多元化、灵活的交互体验&#xff0c;更大程度上解决线上业务办理抽象繁琐&#xff0c;线下业务办理的时空受限、业务…...

MySql面试精选—分库分表

目录 1、分库分表使用场景 2、常见的分库分表方案 3、常用的分库分表中间件...

Spring上下文生命周期

基于入口来分析 import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration;Configuration ComponentScan public cl…...

GitHub 标星 15w,如何用 Python 实现所有算法?

学会了 Python 基础知识&#xff0c;想进阶一下&#xff0c;那就来点算法吧&#xff01;毕竟编程语言只是工具&#xff0c;结构算法才是灵魂。 新手如何入门 Python 算法&#xff1f; 几位印度小哥在 GitHub 上建了一个各种 Python 算法的新手入门大全。从原理到代码&#xf…...

LeetCode 700. 二叉搜索树中的搜索

LeetCode 700. 二叉搜索树中的搜索 难度&#xff1a;easy\color{Green}{easy}easy 难度&#xff1a;middle\color{orange}{middle}middle 难度&#xff1a;hard\color{red}{hard}hard 题目描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 rootrootroot 和一个整数值…...

【数据结构】树与二叉树

目录 1、树的概念及结构 1.1、概念 1、树的特点 2、树与非树 1.2、概念 &#xff08;重要&#xff09; 1.3、树的表示形式 2、二叉树&#xff08;重点&#xff09; 2.1、概念 2.2、二叉树的特点 2.3、两种特殊的二叉树 1、满二叉树 2、完全二叉树 2.4、二叉树的性…...

Stress压力工具的部署及使用

Stress压力工具的部署及使用 下载地址&#xff1a;wget https://fossies.org/linux/privat/old/stress-1.0.5.tar.gz 1.部署 进入目录执行./autogen.sh [rootiZ2ze1pj93eyq389c2ppi5Z stress-1.0.5]# ./autogen.sh ps&#xff1a;如果执行过程中缺包&#xff0c;安装对应的…...

[蓝桥杯 2020 省 AB3] 乘法表

题目描述九九乘法表是学习乘法时必须要掌握的。在不同进制数下&#xff0c;需要不同的乘法表。例如, 四进制下的乘法表如下所示&#xff1a;1*11 2*12 2*210 3*13 3*212 3*321请注意&#xff0c;乘法表中两个数相乘的顺序必须为样例中所示的顺序&#xff0c;不能随意交换两个乘…...

Python基础知识

基础知识 基础知识包括输入输出、变量、数据类型、表达式、运算符这5个方面。 1.输入输出 Python有很多函数&#xff0c;后面我们会细讲&#xff0c;但这里先将两个最基本的函数&#xff1a;输入和输出。 输出函数print()&#xff0c;在前面我们已经用过了&#xff0c;语法…...

FME案例实战教程:聚焦实战应用,摆脱思路束缚,您值得拥有

一、教程链接&#xff08;一&#xff09;FME案例实战教程链接1.FME案例实战教程&#xff08;完整版&#xff09; ☚强烈推荐☚2.FME案例实战教程&#xff08;A组&#xff09;3.FME案例实战教程&#xff08;B组&#xff09;4.FME案例实战教程&#xff08;C组&#xff09;&#…...

【JavaScript】根据元素内容遍历元素的方案

▒ 目录 ▒&#x1f6eb; 导读需求1️⃣ jQuery2️⃣ XPATH&#xff08;document.evaluate&#xff09;3️⃣ 原生js&#xff08;querySelectorAll & Array&#xff09;&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 需求 因业务需要&#xff0c;根据元…...

kafka全解

目录Kafka概述定义消息队列目录结构分析传统消息队列的应用场景消息队列的两种模式点对点模式发布/订阅模式Kafka基础架构Kafka快速入门安装部署集群规划集群部署集群启停脚本Kafka命令行操作Kafka基础架构主题命令行操作生产者命令行操作消费者命令行操作kafka可视化工具Kafka…...

(三)随处可见的LED广告屏是怎么工作的呢?接入GUI

续上文&#xff0c;本篇我们将尝试接入一个GUI来控制点阵屏。在前两篇中&#xff0c;我们相继介绍了点阵屏的控制原理&#xff0c;以及如何让点阵屏按照我们所想的进行显示。本篇将在此基础上接入一个GUI&#xff0c;使点阵屏的控制更加优雅。限于阅读体验和展示效果&#xff0…...

线程池简介

线程池 线程池&#xff08;英语&#xff1a;thread pool&#xff09;&#xff1a;一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时…...

大数据面试题集锦-Hadoop面试题(四)-YARN

你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案。如果你需要更多的面试经验和面试题&#xff0c;关注一下"张飞的猪大数据分享"吧&#xff0c;公众号会不定时的分享相关的知识和资料。 文章目录1、为什么会产生 yarn,它解决了什么问题&#xf…...

Python---time模块

专栏&#xff1a;python 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;Python在学&#xff0c;希望能够得到各位的支持&#xff01;&#xff01;&#xff01; time模块前言时间戳time.time()将时间戳转换成字符串time.ctime()将时间戳转换为元组time.localtime(时间戳)将元…...

坚鹏:学习贯彻二十大精神 解码共同富裕之道(面向银行)

学习贯彻二十大精神 解码共同富裕之道课程背景&#xff1a; 很多银行从业人员存在以下问题&#xff1a;不知道如何准确解读二十大精神&#xff1f;不清楚共同富裕相关政策要求&#xff1f;不知道如何有效推动共同富裕&#xff1f; 课程特色&#xff1a;有实战案例有…...

python查看程序的cpu和内存资源占用情况

1.获取线程消耗的内存 :线程内存使用的概念没有明确定义。线程共享它们的内存。唯一真正的线程本地内存是它的调用堆栈&#xff0c;除非您认真地递归地做一些事情&#xff0c;否则这不是有趣的部分。 2.获取进程消耗的内存 3.获取程序消耗的内存 mprof run endpoint.py 4.查看…...

番外10:使用ADS对射频功率放大器进行非线性测试2(使用带宽20MHz的64QAM信号进行ACLR、EVM、CCDF测试)

番外10&#xff1a;使用ADS对射频功率放大器进行非线性测试2&#xff08;使用带宽20MHz的64QAM信号进行ACLR、EVM、CCDF测试&#xff09; 1、基本理论 功率放大器的非线性性能十分重要&#xff0c;特别是对于当前广泛使用的移动设备。由于其各种复杂的信号调制&#xff0c;功…...

Ubuntu搭建maven私服

1.安装JDK8 已经是JDK8的需要配置环境变量&#xff0c;如果是更高版本的JDK则需要修改nexus配置文件 2.下载nexus安装包 百度网盘下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1DfKqql8tZNQXEBxAEH7UyA 提取码&#xff1a;hx4p安装到有磁盘的目录如下所示&…...

【JavaWeb】Servlet基础

文章目录1.Tomcat服务器安装注意事项2.编写WebApp3.BS系统角色和协议4.模拟Servlet4.1模拟sun公司4.2模拟Tomcat服务器4.3模拟WebApp开发者5.开发一个带有Servlet的WebApp5.1创建一个名为crm的项目5.2 在项目中创建一个名为WEB-INF的文件&#xff08;必须&#xff09;5.3在WEB-…...

pinia + pinia-plugin-persistedstate + 组合式API 写法,持久化失效问题

持久化失效卡了一天的问题安装使用就不多说了&#xff0c;主要是针对持久化失效的几个问题说明和解决方法首先是组合式写法&#xff0c;配置持久化export const useUserStore defineStore(user, () > {},{persist: true} )defineStore 第三个参数&#xff0c;具体可以看 p…...

ptrace 调式详解

在程序出现bug的时候&#xff0c;最好的解决办法就是通过 GDB 调试程序&#xff0c;然后找到程序出现问题的地方。比如程序出现 段错误&#xff08;内存地址不合法&#xff09;时&#xff0c;就可以通过 GDB 找到程序哪里访问了不合法的内存地址而导致的。本文不是介绍GDB不是使…...

随州seo/苏州网站seo优化

我们都知道InnoDB的事务由ACID四个特性&#xff0c;其中A原子性由Undo Log来保证&#xff0c;持久性由Redo Log来保证。本片文章记录了Redo Log和Undo Log&#xff0c;以及数据更新流程中Redo Log的两段提交的学习笔记。Redo LogRedo Log是物理日志。当发生数据修改时&#xff…...

maka怎么做钓鱼网站/b站视频怎么快速推广

1. 插件介绍 kdb_exists_expand插件用于优化EXISTS子链接&#xff0c;生成执行效率更高的执行计划。 对于在查询条件中存在EXISTS子连接的SQL语句&#xff0c;如果满足&#xff1a; EXISTS子链接为SELECT类型的查询语句 EXISTS子链接中为OR条件&#xff0c;如&#xff1a; S…...

ui素材网站/陕西seo公司

在网络上搜索相关的很多资料,总结了一下,发生这种情况的原因主要是由于排序规则引起的:不指定排序规则的话 临时表是否区分大小写,与tempdb数据库的排序有关. 数据库对象是否区分大小写,与数据库本身的排序规则有关. 变量是否区分大小写,与数据库本身的排序规则…...

网站迁移 域名设置/网站搭建步骤

1.什么是进程 程序放置在存储媒体中&#xff0c;为实体文件的形体存在 进程&#xff1a;程序被触发后&#xff0c;执行者的权限与属性&#xff0c;程序的程序码与所需数据等都会被载入内存中&#xff0c;操作系统会给进程一个识别码&#xff08;PID&#xff09; 可以说&…...

wordpress 导入工具插件/芒果视频怎样下载到本地

36匹马分6个组&#xff0c;分别为A、B、C、D、E、F组。第一轮&#xff0c;每个组各跑一次&#xff0c;取每组前三名&#xff0c;标识为A1、A2、A3&#xff0c;B1、B2、B3&#xff0c;以此类推。第二轮&#xff0c;每个组的第一名&#xff08;A1——F1&#xff09;拉出来跑一次&…...

网站技术解决方案/百度端口开户推广

react组件传值方式&#xff1a;(1)父传子:子组件标签定义自定义属性子组件内部this.props接收传递&#xff1a;子组件在父组件中当做标签使用时&#xff0c;子组件标签定义自定义属性val&#xff0c;值为需要传递的值<One val{fatherMsg}></One>接收&#xff1a;子…...