
面试准备-算法
文章平均质量分 85
饼干饼干圆又圆
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RTT工具学习
RT-Thread Studio作为一个开发工具软件,需要一个从了解到熟悉,从熟悉再到熟练应用的过程,特别是对于以前没有用过基于eclipse的开发工具的用户,还是需要先熟悉软件基本使用方法和主要功能入口,然后开发项目。原创 2024-10-29 14:07:39 · 1033 阅读 · 0 评论 -
嵌入式笔试准备
ARM架构的中断服务程序(ISR)的最后一条指令是BX LR。在ARM架构中,Link Register(LR)寄存器通常用来保存子程序返回地址。当发生中断时,硬件会自动将当前PC的值保存到LR中,然后跳转到中断向量表中对应的中断服务程序入口。BX是ARM指令集中的一个分支指令,根据指定的寄存器中的值来确定跳转的目标地址。通过将LR寄存器作为BX指令的操作数,就可以实现从ISR返回到中断发生前的指令处。原创 2024-09-01 14:03:16 · 864 阅读 · 0 评论 -
嵌入式笔试准备
IO多路复用是一种高效的I/O处理机制,它允许单个进程同时监控多个文件描述符(如网络套接字),一旦某个描述符就绪(可读或可写),就能及时通知程序进行相应的读写操作。程序将这些集合传递给select,select监听这些描述符,一旦其中的某个或多个描述符就绪,select 就会返回,程序再对就绪的描述符进行相应的 IO 操作。条件变量与互斥锁配合使用,允许线程等待某个特定的条件的发生。poll与select类似,但没有文件描述符数量的限制,并且使用了更灵活的数据结构(链表),可以监视更多的文件描述符。原创 2024-08-28 20:36:47 · 1265 阅读 · 0 评论 -
嵌入式笔试准备
假设这些腐烂橘子先开始是新鲜的,而有一个腐烂橘子(超级源点)会在下一秒把这些句子都变腐烂,而这个腐烂橘子刚开始的时间是-1,那么按照广度优先搜索的算法,下一分钟(第0分钟)这个腐烂橘子会把它们都变成腐烂橘子,然后继续向外拓展,所以其实这些腐烂橘子是同一层的节点。对于对象B,包含一个虚函数指针,也是对齐到8字节,然后是4个char型,最后补齐到8字节整倍数,变成16字节。C++的多态肯定是使用父类的指针指向子类的对象,所以肯定是释放子类的对象,如果不使用虚函数的话,父类的指针就只能释放父类的对象。原创 2024-08-28 10:32:43 · 965 阅读 · 0 评论 -
C语言笔试准备
经常要操作的内存分为哪几个类别?线程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。线程间可以直接读写进程数据段(如全局变量)来通信。线程上下文切换要比进程快。使用哈夫曼算法编码后,用编码值来存储这段文本将花费最少的存储空间。使用哈夫曼算法进行编码,编码值可以有多套,但每个字符编码的位是确定的。哈夫曼树带权路径长度最短的树,路径上全值较大的节点离根较近。当从一个最小堆删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整到合适位置。原创 2024-08-26 14:16:49 · 906 阅读 · 0 评论 -
面试准备算法
我们将设置慢指针slow和快指针fast,慢指针每次走一步,快指针走两步,在有环的情况下一定相遇,此时再将慢指针放到slow,两个指针同时移动一步,相遇的点就是答案。对nums数组建图,每个位置i连一条i->nums[i]的边,由于存在重复的数字target,因此,target这个位置至少有两条指向它的边,在构建完图之后,对于任何一个查询,就可以从起点出发,通过广度优先搜索的方式,不断更新起点与当前点之间的路径,直到搜索到终点为止。因此,为了深拷贝出整张图,我们需要知道整张图的结构以及对应节点的值。原创 2024-08-22 15:15:02 · 962 阅读 · 0 评论 -
面试准备算法
对于数组中的每个元素,如果它与前面的元素最大公约数为1,那么它需要作为新的子数组的第一个元素。所以我们考虑以i结尾的和为k的连续子数组的个数时,只需要统计有多少个前缀和为pre[i] - k的pre[j]即可。所以考虑以i结尾的和为k的连续子数组个数只需要统计有多少个前缀和pre[i] - k的pre[j]即可。,i]里所有数的和,则pre[i] = pre[i-1] + nums[i],i]子数组和为k可以转换为pre[i] - pre[j-1] == k。查看Linux磁盘用量常用命令。原创 2024-08-20 09:53:59 · 711 阅读 · 0 评论 -
面试准备算法
i++){j--){原创 2024-08-18 16:59:14 · 802 阅读 · 0 评论 -
经典算法题准备
数组nums升序排列,数组中的值互不相同。二分查找对于有序数组,可以使用二分查找的方法查找元素。我们将数组从中间分开,一定有一部分是有序的,[4,5,6]和[7,0,1,2]。可以分割出[l, mid],[mid+1, r]哪个部分有序。在排序数组中查找元素的第一个和最后一个位置三数之和LRU缓存请设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:哈希表+双向链表LRU缓存机制可以通过哈希表+双向链表实现。双向链表按照被使用的顺序存储了这些键值对,靠近头原创 2024-08-05 16:06:10 · 795 阅读 · 0 评论 -
嵌入式面试准备
可以用哈希表存储所有节点的父节点,然后从p节点依次向上跳,将经过的地方标记为true。q节点向上跳,遇到的第一个为true的节点,就是公共节点。给两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。定义dp[i]表示0,…,i-1是否能被空格拆分成若干字典中出现的单词。暴力枚举的时间复杂度高的原因是寻找target-x的时间复杂度过高。如果有两件,选择其中最高的一间,获得最高金额。如果只有一间房屋,则偷窃该房屋获得最高金额。原创 2024-07-29 20:30:43 · 901 阅读 · 0 评论 -
嵌入式面试准备
Linux系统中有很多种系统服务,大多数服务都是通过守护进程实现的,譬如系统日志服务syslog,web服务httpd,邮件服务sendmail和数据库服务mysqld等。假如是在排序数组中寻找一个目标值,那么直接利用二分法就可以在O(log n)找到目标值,但是这题添加了额外条件,如果不存在数组中的时候,需要返回插入顺序。父进程先于子进程结束,也就意味着,此时子进程变成了一个孤儿进程,在Linux系统中,所有孤儿进程都自动变成init进程的子进程。给一棵完全二叉树的根节点root,求出该树的节点个数。原创 2024-07-29 08:55:02 · 960 阅读 · 0 评论 -
面试算法刷题
需要调查从start基因变为end基因的基因变化,一次基因变化就意味着一个字符发生变化。如果start与end相等,此时返回0,如果最终基因序列不在bank中,返回-1。基因序列可表示为一条由8个字符组成的字符串,每个字符都是A,C,G,T。层次遍历,每次取出每一层的最后一个节点的值,加入到res即可。变化后的基因必须位于bank中。任何边界上的0不会被填充为X。原创 2024-07-27 07:51:44 · 290 阅读 · 0 评论 -
嵌入式面试总结
声明一个指向含有10个元素的数组的指针,其中每一个元素是一个函数指针,函数的返回值是int,参数是int*。原创 2024-07-26 07:48:40 · 890 阅读 · 0 评论 -
嵌入式面试总结
在计算机系统中,通常存储空间分为两种:内部存储空间和外部存储空间。内部存储空间通常访问速度比较快,能按照变量地址随机访问。也就是我们所说的RAM(随机存储器)。外部存储空间保存的内容相对固定,即使掉电后数据也不会丢失。变量,中间数据一般存放在RAM中,只有实际使用时才将它们从RAM调入到CPU中进行运算。一些数据需要的内存大小在程序运行过程中根据实际情况确定,这就要求具备动态管理内存的能力。原创 2024-07-19 07:36:54 · 726 阅读 · 0 评论 -
嵌入式面试
嵌入式实时多线程操作系统,基本属性之一是支持多任务。一个处理器核心在某一时刻只能运行一个任务。在RTT中,任务通过线程实现。RTT主要采用C语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。相较于Linux操作系统,RTT体积小,成本低,功耗低,启动速度快,实时性高,占用资源小,非常适用于资源受限的场合。物联网操作系统是指以操作系统内核为基础,包括文件系统、图形库等较为完整的中间件组件,具备低功耗、安全的软件平台。原创 2024-07-16 18:14:51 · 950 阅读 · 0 评论 -
嵌入式面试总结
new 、delete是C++中的操作符,而malloc、free是标准库函数。new、delete是类型安全的,new知道要分配对象的类型并调用构造函数,malloc只知道字节大小,不调用构造函数。new调用构造函数,delete调用析构函数。malloc、free不调用析构函数。new返回指定类型的指针,malloc返回void*,需要强制类型转换。new可以初始化对象,malloc不会初始化分配的内存。new在分配失败时抛出异常,malloc在分配失败时返回NULL。原创 2024-07-15 14:08:39 · 802 阅读 · 0 评论 -
嵌入式面试准备
malloc()从堆里面获得空间,也就是说函数返回的指针是指向堆里面的一块内存,操作系统中有一个记录空闲内存地址的链表,当操作系统收到程序的申请时,就会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该结点的空间分配给程序。依次从小到大取每个序列中的元素比较,较小的一个放进新序列,取完一个有序序列中的所有元素后,再把剩下一个序列中的元素放进新序列的后面的即可。最坏情况下,每次选择的基准总是数组中的最小或最大元素时,快速排序退化为链表,高度为n,每层需要进行n次比较。原创 2024-07-13 10:46:45 · 654 阅读 · 0 评论 -
操作系统——内存管理(面试准备)
我们来看这样一个例子。每个进程都有4GB的虚拟地址空间,而对于大多数程序来说,其使用到的空间远未达到4GB,因为会存在部分对应的页表项都是空的,根本没有分配,对于已分配的页表项,如果存在最近一定时间未访问的页表,在物理内存紧张情况下,操作系统会将页面换出到硬盘,也就是说不会占用物理内存。我们利用这一特性,把最常访问的几个页表项存储到访问速度更快的硬件,于是计算机科学家们,就在CPU芯片中,加入了一个专门存放程序最常访问的页表项的Cache,这个Cache就是TLB,通常称为页表缓存,转址旁路缓存、快表等。原创 2024-07-11 09:53:26 · 1372 阅读 · 0 评论 -
面试经典题
public:i--;i--;return res;使用分段存储管理方式,当进程在主存中没有找到需要访问的页面并且内存中没有空闲物理块,需要进行页面置换。产生缺页中断后,首先去内存寻找空闲物理块,若内存没有空闲物理块,使用相应的页面置换算法决定淘汰页面,然后调出淘汰页面,最后调入该进程需要访问的页面。volatile关键字并不能保证线程安全。HTTP协议的响应码由三个十进制数字组成,第一个数字为1~5表示5种状态。原创 2024-07-10 19:28:40 · 1534 阅读 · 0 评论 -
面试经典150题
当遇到两个点时,只要栈不为空,就切换到上一级(弹出栈顶目录),当遇到目录名时,就放入栈。因此,如果展开表达式中所有的括号,则得到的新表达式中,数字本身不会发生变化,只是每个数字前面的符号会变化。如果将所有大写字符转换为小写字符,并移除所有非字母数字后,正着读和反着读一样,就认为短语是一个回文串。每次贪心匹配,匹配成功则i和j同时右移,匹配s的下一个位置,匹配失败则j右移,i不变。设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。给定字符串s和t,判断s是否为t的子序列。原创 2024-07-09 11:23:29 · 1302 阅读 · 1 评论 -
面试经典150题
如果我们能计算出所有dp[i][j]的值,那么其中的最大值即为矩阵中只包含1的正方形的边长的最大值,其平方就是最大正方形的面积。此外,还需要考虑边界条件,如果i和j中至少有一个为0,则以此位置为右下角的最大正方形的边长只能是1,因此dp[i][j] = 1。如果要移除的元素在数组的开头,例如序列[1,2,3,4,5],当val为1时,我们需要把每一个元素都左移一位。对于一个节点u,如果它的所有相邻节点都已经搜索完成,那么回溯到u的时候,u本身也会变成一个已经搜索完成的节点。那么称该排列是图G的拓扑排序。原创 2024-07-08 21:35:17 · 864 阅读 · 0 评论 -
面试准备算法
二叉搜索树的。原创 2024-07-05 09:44:59 · 441 阅读 · 0 评论 -
面试准备算法
由于链表不支持随机访问,因此常见的找出链表中节点的方式是使用快慢指针,fast每次遍历两个元素,慢指针slow每次遍历一个元素,这样在快指针遍历完链表时,慢指针就恰好在链表的中间位置。给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。可以把n个城市和它们之间的相连关系看成图,城市是图中的节点,相连关系是图中的边,省份即为图中的连通分量。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正向右移动,负向左移动)。原创 2024-07-02 10:53:19 · 1089 阅读 · 0 评论 -
面试准备算法
答案肯定是字符串的某个前缀,然后简单直观的想法是枚举所有前缀来判断,设前缀长度lenz,前缀串的长度必然要是两个字符串长度的约数才能满足条件。可以枚举长度,再去判断这个前缀串拼接若干次以后是否等于str1和str2。原创 2024-06-28 09:37:53 · 408 阅读 · 0 评论 -
面试经典150题
每一轮迭代,将nums[end]加到sum,如果sum≥s,则更新子数组的最小长度(此时子数组的长度是end-start+1)我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积相乘得到答案。dp[i][0]:表示第i天交易完后手里没有股票的最大利润,dp[i][1]表示第i天交易完后手里持有一只的最大利润。找出该数组中满足其总和大于等于target的长度最小的子数组,并返回长度。找出总和大于等于target的最小子数组的长度,如果没有,返回0。原创 2024-06-18 11:07:54 · 508 阅读 · 0 评论 -
Leetcode面试经典150题
机器人每次只能向下或者向右移动一步,所以从坐标(0,0)到坐标(i,j)路径总数的值只取决于从坐标(0,0)到坐标(i-1,j)的路径总和和从坐标(0,0)到坐标(i,j-1)的路径总数。用f(i,j)来表示从坐标(0, 0)到坐标(i, j)的路径总数,u(i,j)表示坐标(i,j)是否可行,如果坐标(i,j)有障碍物,u(i,j)=0,否则u(i,j)=1。采用自下而上的方式进行思考,仍定义F(i)为组成金额i所需最少的硬币数量,假设在计算F(i)之前,已经计算出F(0)到F(i-1)的答案。原创 2024-06-17 11:21:40 · 542 阅读 · 0 评论 -
leetcode热题100
每分钟腐烂的橘子会使上下左右相邻的新鲜橘子腐烂,这其实是一个模拟广度优先搜索的过程。所谓广度优先搜索,就是从起点触发,每次都尝试访问同一层的节点,如果同一层都访问完了,再访问下一层,最后广度优先搜索找到的路径就是从起点开始的最短合法路径。原创 2024-06-15 07:34:13 · 363 阅读 · 0 评论 -
Leetcode热题100
如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。给一个长度为n的链表,每个结点包含一个额外增加的随机数指针random,该指针可以指向链表中的任何节点或空节点。对于当前节点,我们首先要进行拷贝,然后进行当前节点的前节点和后节点拷贝,拷贝完成后将创建的新节点的指针返回。用head表示原始链表的头节点,新的链表的第二个节点,newHead为新的链表的头节点。如果是普通链表,可以直接按照遍历的顺序创建链表节点。原创 2024-06-13 08:03:43 · 347 阅读 · 0 评论 -
Leetcode热题100
由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。如果我们位于位置(x,y),那么以matrix的左下角为左下角,以(x,y)为右上角的矩阵中搜索,即行的搜索范围[x,m-1],列的范围[0,y]初始时,慢指针在位置head,快指针在位置head.next,如果快指针反过来追上慢指针,说明链表为环形链表,否则快指针到达链表尾部。在更改之前还需存储后一个节点。定义两个指针,一快一慢,慢指针每次只移动一步,快指针每次移动两步。原创 2024-06-12 07:32:13 · 1132 阅读 · 0 评论 -
LeetCode热题 100
仔细分析这个过程,会发现其中执行了很多不必要的枚举,如果已知有一个从x开始的连续序列,而我们却从x+1开始,那么得到的结果肯定不会优于枚举x为起点的答案,因此我们在外层循环的时候碰到这种情况跳过即可。对于匹配的过程,暴力的方法是O(n)遍历数组去看是否存在这个数,但其实更高效的方法是使用一个哈希表存储数组中的数,这样查看一个数是否存在即能优化至O(1)的时间复杂度。仅仅是这样,我们的算法时间复杂度最坏情况下还是会达到O(n²)(外存需要枚举O(n)个数,内存需要暴力匹配O(n)次),无法满足题目的要求。原创 2024-06-11 09:15:17 · 1124 阅读 · 0 评论 -
计算机网络概述
对于不同的网络应用需要有不同的应用层协议,在互联网中的应用层协议很多,如域名系统DNS,支持万维网的HTTP协议,支持电子邮件的SMTP协议,等等。运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务。网络层的另一个任务是选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫作IP数据报,简称数据报。所谓通用的,是指并不针对某个特定网络应用,而是多种应用可以使用同一个运输层服务。数据链路层通常称为链路层。原创 2024-04-22 09:34:28 · 1807 阅读 · 0 评论 -
Leetcode算法题
当一个版本为正确版本,则该版本之前所有的版本均为正确版本,当一个版本为错误版本,则该版本之后的所有版本均为错误版本。最朴素的想法是存储数组nums的值,每次调用sumRange时,通过循环的方式计算和,一共计算j-i+1个元素的和。产品的最新版本没有通过质量检测,由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。扫描过程中,维护当前整理好的字符串,记为ret。原创 2024-04-13 08:50:07 · 762 阅读 · 0 评论 -
Leetcode算法题
显而易见的是,如果石头堆中只有一块、两块、或是三块石头,那么在你的回合,你就可以把全部石子拿走,从而在游戏中取胜;因此,要想获胜,在你的回合中,必须避免石头堆中的石子数为 4 的情况。对二叉树的根节点root进行深度优先搜索,在搜索过程中,根据规则对遍历的节点的值进行恢复,并且将遍历的节点的值加入哈希表valSet中。如果当前遍历到的节点root的左右子树都已经翻转,那么只需要交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。从根节点开始,递归地对树进行遍历,并从叶子节点开始翻转。原创 2024-03-13 13:48:58 · 965 阅读 · 1 评论 -
Leetcode算法题
为了让数组之和最小,我们按照1,2,3的顺序考虑,但添加了x之后,就不能添加taget-x,因此最大可以添加到target/2,如果个数不够,就继续从target,target+1,…我们可以遍历secret和 guess,统计满足 secret[i] == guess[i] 的下标个数,即为公牛的个数。需要构造一个大小为n的正整数数组,该数组由不同的数字组成,并且没有任意两个数字的和等于target,在满足这样的前提下,要保证数组的和最小。给定一个大小为 n 的数组 nums ,返回其中的多数元素。原创 2024-03-10 09:38:01 · 992 阅读 · 0 评论 -
Leetcode算法题
如果当前节点在哈希集合中,则后面的节点都在哈希集合中,即从当前节点开始的所有节点都在两个链表的相交部分,因此在链表 headB\textit{headB}headB 中遍历到的第一个在哈希集合中的节点就是两个链表相交的节点,返回该节点。每次到达一个节点,如果该节点已经存在于哈希表中,则说明该链表是环形链表,否则就将该节点加入哈希表中。初始时,慢指针在head,快指针在head.next,若在移动过程中,快指针反过来追上慢指针,说明链表是环形。定义两个指针,慢指针每次移动一步,快指针每次移动两步。原创 2024-03-07 21:12:09 · 860 阅读 · 0 评论 -
Leetcode算法题
给定一个二叉树的根节点root,返回它的中序遍历。中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。相同的树给两棵二叉树的根节点p和q,编写一个函数验证这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,原创 2024-03-06 14:57:27 · 1271 阅读 · 0 评论 -
Leetcode算法题
本题是一道常见的面试题,面试官一般会要求面试者在不使用 x\sqrt{x}x函数的情况下,得到 xxx 的平方根的整数部分。一般的思路会有以下几种:通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;通过数学方法得到近似结果,直接作为答案。函数的情况下,得到 xxx 的平方根的整数部分。一般的思路会有以下几种:通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;通过数学方法得到近似结果,直接作为答案。原创 2024-03-05 15:23:07 · 941 阅读 · 0 评论 -
Leetcode算法题
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。将一个栈当作输入栈,用于压入push传入的数据;另一个栈当作输出栈,用于pop和peek操作。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。原创 2024-03-04 17:53:54 · 456 阅读 · 0 评论 -
Leetcode算法题
可以使用两个队列实现栈的操作,其中queue1用于存储栈内的元素,queue2作为入栈操作的辅助队列。入栈操作时,首先将元素入队到queue2,然后将queue1的全部元素依次出队并入到queue2,此时queue2的前端的元素即为新入栈的元素,再将queue1和queue2互换,则queue1的元素即为站内的元素,queue1的前端和后端对应栈顶和栈底。由于每次入栈都确保queue1的前端元素为栈顶。原创 2024-03-03 11:20:37 · 511 阅读 · 0 评论 -
Leetcode算法题
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k。判题标准:原创 2024-02-29 15:21:18 · 1231 阅读 · 0 评论