程序员代码面试指南
文章平均质量分 71
左神关于名企算法与数据结构题目最优解
老张你要老婆不要
Java搬砖仔
展开
-
旋变字符串
旋变字符串题目描述一个字符串可以分解为多种二叉树。如果str长度为1,认为不可分解;如果str长度为N(N>1),左半部分长度可以为1~N-1,右半部分为剩下的长度,然后你可以交换左右两部分。并且左右部分可以按照同样的逻辑,继续分解。每一个形成的字符串都可以是原字符串的旋变字符串。现在给你两个字符串str1和str2,判断str2是否为str1的旋变字符串。输入描述:输入包括两行,第一行一个字符串,代表str1(1≤lengthstr1≤100)str1( 1 \leq length_{str原创 2021-01-10 12:47:08 · 255 阅读 · 0 评论 -
字符串的转换路径问题
字符串的转换路径问题题目描述给定两个字符串,记为start和to,再给定一个字符串列表list,list中一定包含to,list中没有重复的字符串。所有的字符串都是小写的。规定start每次只能改变一个字符,最终的目标是彻底变成to,但是每次变成新字符串必须在list中存在。请返回所有的最短的变换路径(按照字典序最小的顺序输出)。输入描述:输入包含多行,第一行包含一个整数n(1≤n≤5000)n(1 \leq n \leq 5000)n(1≤n≤5000),代表list的中字符串的个数,第二行中包含原创 2021-01-10 10:18:25 · 1127 阅读 · 0 评论 -
删除多余的字符得到字典序最小的字符串
删除多余的字符得到字典序最小的字符串题目描述给一个全是小写字母的字符串str,删除多余字符,使得每种字符只保留一个,并且让最终结果字符串字典序最小。输入描述:输入包含一行字符串,代表str(1≤lengthstr≤105)str(1 \leq length_{str} \leq 10^5)str(1≤lengthstr≤105)。输出描述:输出一行,代表删除后的字符串。示例1输入acbc输出abc示例2输入dbcacbca输出dabc备注:时间复杂度O(n)O(原创 2021-01-09 20:54:03 · 1009 阅读 · 0 评论 -
最短包含字符串的长度
最短包含字符串的长度题目描述给定字符串str1和str2,求str1的字串中含有str2所有字符的最小字符串长度。输入描述:输入包括两行,第一行一个字符串,代表str1(1≤lengthstr1≤105)str1( 1 \leq length_{str1} \leq 10^5)str1(1≤lengthstr1≤105),第二行也是一个字符串,代表str2(1≤lengthstr2≤105)str2( 1 \leq length_{str2} \leq 10^5)str2(1≤lengthstr2原创 2021-01-09 19:02:56 · 929 阅读 · 0 评论 -
子数组的最大异或和
子数组的最大异或和题目描述数组异或和的定义:把数组中所有的数异或起来得到的值。给定一个整型数组arr,其中可能有正、有负,有零,求其中子数组的最大异或和。输入描述:输出包含两行,第一行一个整数n(1≤n≤105)n(1 \leq n \leq 10^5)n(1≤n≤105),代表数组arr长度,第二个n个整数,代表数组arr(−109≤arri≤109)arr(-10^9 \leq arr_i \leq 10^9)arr(−109≤arri≤109)。输出描述:输出一个整数,代表其中子数组的最原创 2021-01-09 17:21:39 · 1250 阅读 · 0 评论 -
一种怪异的节点删除方式
一种怪异的节点删除方式题目描述链表节点值类型为 int 类型,给定一个链表中的节点 node,但不给定整个链表的头节点。如何在链表中删除 node ? 请实现这个函数。输入描述:给出一个单链表的节点。输出描述:不需要返回值。示例1输入5 1 2 3 4 53输出1 2 4 5备注:保证要删除的这个节点不是链表的尾节点。题解:将下一个节点的值赋给要删除节点,然后删除下一个节点即可。代码:# include <bits/stdc++.h>using na原创 2021-01-09 13:22:21 · 89 阅读 · 0 评论 -
单调栈结构(进阶)
单调栈结构(进阶)题目描述给定一个可能含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。输入描述:第一行输入一个数字 n,表示数组 arr 的长度。以下一行输入 n 个数字,表示数组的值输出描述:输出n行,每行两个数字 L 和 R,如果不存在,则值为 -1,下标从 0 开始。示例1输入73 4 1 5 6 2 7输出-1 20 2-1 -12 53 52 -15 -1备注:1≤n≤10原创 2021-01-09 12:16:10 · 302 阅读 · 0 评论 -
派对的最大快乐值
派对的最大快乐值题目描述整个公司的人员结构可以看作是一棵标准的多叉树。树的头节点是公司唯一的老板,除老板外,每个员工都有唯一的直接上级,叶节点是没有任何下属的基层员工,除基层员工外,每个员工都有一个或多个直接下级,另外每个员工都有一个快乐值。这个公司现在要办 party,你可以决定哪些员工来,哪些员工不来。但是要遵循如下的原则:1.如果某个员工来了,那么这个员工的所有直接下级都不能来。2.派对的整体快乐值是所有到场员工快乐值的累加。3.你的目标是让派对的整体快乐值尽量大。给定一棵多叉树,请输出原创 2021-01-09 10:45:32 · 729 阅读 · 0 评论 -
完美洗牌问题(2)
完美洗牌问题(2)题目描述给定一个数组arr,请将数组调整为依次相邻的数字,总是先<=、再>=的关系,并交替下去。比如数组中有五个数字,调整成[a,b,c,d,e],使之满足a<=b>=c<=d>=e。输入描述:输入包含两行,第一行一个整数n(1≤n≤105)n(1 \leq n \leq 10^5)n(1≤n≤105),代表数组的长度,接下来一行n个整数,代表数组arr(1≤arri≤109)arr(1 \leq arr_i \leq 10^9)arr(1≤ar原创 2021-01-08 22:17:14 · 185 阅读 · 0 评论 -
完美洗牌问题(1)
完美洗牌问题(1)题目描述给定一个长度为偶数的数组arr,长度记为2∗N2*N2∗N。前n个为左部分,后n个为右部分。arr可以表示为{L1,L2...Ln−1,Ln,R1,R2...Rn−1,Rn}\{L_1,L_2...L_{n-1},L_n,R_1,R_2...R_{n-1},R_n \}{L1,L2...Ln−1,Ln,R1,R2...Rn−1,Rn},请将数组调整成{R1,L1,R2,L2,...Rn,Ln}\{ R_1,L_1,R_2,L_2,...R_n,L_n \}{R1原创 2021-01-08 12:56:42 · 306 阅读 · 0 评论 -
可见的山峰对数量(进阶)
可见的山峰对数量(进阶)题目描述一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度。比如,{3,1,2,4,5},{4,5,3,1,2}或{1,2,4,5,3}都代表同样结构的环形山。3->1->2->4->5->3 方向叫作 next 方向(逆时针),3->5->4->2->1->3 方向叫作 last 方向(顺时针)。山峰 A 和 山峰 B 能够相互看见的条件为:如果 A 和 B 是同一座山,认为不能相互看见。如原创 2021-01-07 13:27:54 · 264 阅读 · 0 评论 -
判断数组中所有的数字是否只出现一次
判断数组中所有的数字是否只出现一次题目描述给定一个个数字arr,判断数组arr中是否所有的数字都只出现过一次。输入描述:输入包括两行,第一行一个整数n(1≤n≤105)n(1 \leq n \leq 10^5)n(1≤n≤105),代表数组arr的长度。第二行包括n个整数,代表数组arr(1≤arr[i]≤107)arr(1 \leq arr[i] \leq 10^7 )arr(1≤arr[i]≤107)。输出描述:如果arr中所有数字都只出现一次,输出“YES”,否则输出“NO”。示例1输原创 2021-01-06 12:11:06 · 1542 阅读 · 4 评论 -
可见的山峰对数量
可见的山峰对数量题目描述一个不含有负数数组可以代表一圈环形山,每个位置的值代表山的高度。比如,{3,1,2,4,5},{4,5,3,1,2}或{1,2,4,5,3}都代表同样结构的环形山。3->1->2->4->5->3 方向叫作 next 方向(逆时针),3->5->4->2->1->3 方向叫作 last 方向(顺时针)。山峰 A 和 山峰 B 能够相互看见的条件为:如果 A 和 B 是同一座山,认为不能相互看见。如果 A 和原创 2021-01-05 16:07:13 · 215 阅读 · 0 评论 -
单调栈结构
单调栈结构题目描述给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。输入描述:第一行输入一个数字 n,表示数组 arr 的长度。以下一行输出 n个数字,表示数组的值。输出描述:输出n行,每行两个数字 L 和 R,如果不存在,则值为-1,下标从0开始。示例1输入73 4 1 5 6 2 7输出-1 20 2-1 -12 53 52 -15 -1备注:1≤n≤10000001 \原创 2021-01-04 21:09:07 · 123 阅读 · 0 评论 -
邮局选址问题
邮局选址问题题目描述一条直线上有居民点,邮局只能建在居民点上。给定一个有序整形数组arr,每个值表示居民点的一维坐标,再给定一个正数num,表示邮局数量。选择num个居民点建立num个邮局,使所有的居民点到邮局的总距离最短,返回最短的总距离。输入描述:第一行有两个整数N,num。分别表示居民点的数量,要建的邮局数量。接下来一行N个整数表示邮局的坐标。保证坐标递增输出描述:输出一个整数表示答案示例1输入6 21 2 3 4 5 1000输出6说明第一个邮局建立在3位置,第二原创 2021-01-03 11:34:00 · 2866 阅读 · 0 评论 -
画匠问题
画匠问题题目描述给定一个整型数组arr, 数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个整数num,表示画匠的数量,每个画匠只能画连在一起(即数组内连续的一段)的画作。所有画家并行工作,请返回完成所有的画作的最少时间。[要求]时间复杂度为O(nlogS)O(n \log S)O(nlogS)(其中S表示所有画作所需时间的和)输入描述:第一行两个整数N, K表示数组大小,画匠的数量。接下来一行N个整数表示完成每幅画作所需要的时间。输出描述:输出一个整数表示答案示例1输入原创 2020-12-31 12:06:35 · 188 阅读 · 0 评论 -
丢棋子问题
丢棋子问题题目描述一座大楼有0∼N0 \sim N0∼N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会摔碎(1⩽i⩽N1 \leqslant i \leqslant N1⩽i⩽N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔的最小次数。一次只能扔一个棋子。[要求]时间复杂度在最坏情况下为O(n)O(n)O(n)输入描述:输入两个数N, K输出描述:输出一个数表示答案。原创 2020-12-30 13:26:10 · 404 阅读 · 0 评论 -
Manacher算法进阶问题
Manacher算法进阶问题题目描述给定一个字符串str,想通过添加字符的方式使得str整体都变成回文字符串,但要求只能在str的末尾添加字符,请返回在str后面添加的最短字符串[举例]str = “abcd123321”,在必须包含最后一个字符的情况下,最长的回文子串是"123321",之前不是最长回文子串的部分是’abcd",所以末尾应该添加的部分就是"dcba"。[要求]如果str的长度为N,解决进阶问题的时间复杂度为O(N)O(N)O(N)保证输入数据无回文串输入描述:输入为一个字原创 2020-12-29 15:23:05 · 172 阅读 · 1 评论 -
Manacher算法
Manacher算法题目描述给定一个字符串str, 返回str中最长回文子串的长度[举例]str=“123”。其中的最长回文子串“1”或者“2”或者“3”,所以返回1。str=“abc1234321ab”。其中的最长回文子串“1234321”,所以返回7。[要求]如果str的长度为N,解决原问题的时间复杂度都达到O(N)O(N)O(N)输入描述:输入为一个字符串str输出描述:输出一个整数表示最长回文子串的长度示例1输入123输出1示例2输入abc1234321ab原创 2020-12-29 14:20:10 · 95 阅读 · 0 评论 -
出现次数的TopK问题
出现次数的TopK问题题目描述给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印 出次数前k名的字符串。[要求]如果strArr长度为N,时间复杂度请达到O(NlogK)O(N \log K)O(NlogK)输入描述:第一行两个整数N, k。N表示数组大小接下来N行,每行一个字符串输出描述:输出K行,每行有一个字符串和一个整数。你需要按照出现出现次数由小到大输出,若出现次数相同时字符串字典序较小的优先输出示例1输入4 21234输出1 1原创 2020-12-28 12:30:16 · 170 阅读 · 0 评论 -
两个有序数组间相加和的Topk问题
两个有序数组间相加和的Topk问题题目描述给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数组按照降序输出[要求]时间复杂度为O(klogk)O(k \log k)O(klogk)输入描述:第一行三个整数N, K分别表示数组arr1, arr2的大小,以及需要询问的数接下来一行N个整数,表示arr1内的元素再接下来一行N个整数,表示arr2内的元素输出描述:输出K个整数表示答案示例1输入5 41原创 2020-12-27 15:06:50 · 1709 阅读 · 0 评论 -
在两个排序数组中找到第k小的数
在两个排序数组中找到第k小的数题目描述给定两个有序数组arr1和arr2,再给定一个整数K,返回所有数中第K小的数。[要求]如果arr1的长度为N,arr2的长度为M,时间复杂度请达到O(log(minN,M))O(\log(\min{N, M}))O(log(minN,M)),额外空间复杂度O(1)O(1)O(1)。输入描述:第一行三个整数N, M, K分别表示数组arr1, arr2的大小,以及需要询问的数接下来一行N个整数,表示arr1内的元素再接下来一行M个整数,表示arr2内的原创 2020-12-26 12:44:42 · 1377 阅读 · 0 评论 -
在两个长度相等的排序数组中找到上中位数
在两个长度相等的排序数组中找到上中位数题目描述给定两个有序数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。上中位数:假设递增序列长度为n,若n为奇数,则上中位数为第n/2+1个数;否则为第n个数[要求]时间复杂度为O(logN)O(logN)O(logN),额外空间复杂度为O(1)O(1)O(1)输入描述:第一行一个整数N,表示数组大小。接下来一行N个整数,表示arr1内的元素再接下来一行N个整数,表示arr内的元素输出描述:输出一个整数表示答案示例1原创 2020-12-25 12:24:32 · 797 阅读 · 0 评论 -
随时找到数据流的中位数
随时找到数据流的中位数题目描述有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。[要求]如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)O(logN)O(logN)。取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1)O(1)O(1)输入描述:第一行一个整数Q,表示有Q原创 2020-12-24 20:57:22 · 218 阅读 · 0 评论 -
一种消息接收并打印的结构设计
一种消息接收并打印的结构设计题目描述已知一个消息流会不断地吐出整数1∼N1 \sim N1∼N,但不一定按照顺序吐出。如果上次打印的数为i,那么当i+1出现时,请打印i+1及其之后接收过的并且连续的所有数,直到1∼N1 \sim N1∼N全部接收并打印完,请设计这种接收并打印的结构[要求]消息流最终会吐出全部的1∼N1 \sim N1∼N,当然最终也会打印完所有的1∼N1\sim N1∼N,要求接收和打印1∼N1 \sim N1∼N的整个过程,时间复杂度为O(N)$。输入描述:第一行一个整数N。原创 2020-12-23 10:52:47 · 515 阅读 · 0 评论 -
分糖果问题进阶问题
分糖果问题进阶问题题目描述一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:每个孩子不管得分多少,起码分到一个糖果。任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。任意两个相邻的孩子之间的得分如果一样多,糖果数必须相同给定一个数组arr代表得分数组,请返回最少需要多少糖果。输入描述:第一行一个整数N表示数组大小接下来一行N个整数表示数组内的元素输出描述:输出一个整数表示答案示例1输入31 2 2输出5说明最优分配方案为1, 2, 2原创 2020-12-22 10:57:36 · 937 阅读 · 0 评论 -
分糖果问题
分糖果问题题目描述一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:每个孩子不管得分多少,起码分到一个糖果。任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)给定一个数组arr代表得分数组,请返回最少需要多少糖果。输入描述:第一行一个整数N表示数组大小接下来一行N个整数表示数组内的元素输出描述:输出一个整数表示答案示例1输入31 2 2输出4说明最优分配方案为1, 2, 1备注:1⩽N⩽1051 \leqslant N原创 2020-12-21 11:01:32 · 844 阅读 · 1 评论 -
数字的英文表达和中文表达
数字的英文表达和中文表达题目描述给定一个32位整数num,写两个函数分别返回num的英文与中文表达字符串注意: 如果你的程序出现了本地测试争取但题解错误的情况,请检查字符集以及行末空格问题[举例]num=319英文表达字符串为:Three Hundred Nineteen中文表达字符串为:三百一十九num=1014英文表达字符串为:One Thousand, Fourteen中文表达字符串为:一千零十四num=-2147483648英文表达字符串为:Negative, Two Bil原创 2020-12-20 14:49:50 · 1030 阅读 · 0 评论 -
在有序旋转数组中找到一个数
在有序旋转数组中找到一个数题目描述有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1, 2, 3, 4, 5, 6, 7],可以旋转处理成[4, 5, 6, 7, 1, 2, 3]等。给定一个可能旋转过的有序数组arr,再给定一个数num,返回arr中是否含有num关于旋转操作:可以简单的理解为把序列从某个位置切成两段然后交换位置[要求]期望复杂度为O(logn)O(\log n)O(logn)输入描述:第一行两个整数N, num。分别表示数组大小,原创 2020-12-19 13:39:25 · 288 阅读 · 1 评论 -
在有序旋转数组中找到最小值
在有序旋转数组中找到最小值题目描述有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1, 2, 3, 4, 5, 6, 7],可以旋转处理成[4, 5, 6, 7, 1, 2, 3]等。给定一个可能旋转过的有序数组arr,返回arr中的最小值。[要求]期望复杂度为O(logn)O(\log n)O(logn)输入描述:第一行一个整数N表示数组大小。接下来N个数表示数组内的数。输出描述:输出一个整数表示答案示例1输入71 2 3 4 5 6原创 2020-12-18 11:15:13 · 199 阅读 · 0 评论 -
判断一个数是否是回文数
判断一个数是否是回文数题目描述定义回文数的概念如下:如果一个非负数左右完全对应,则该数是回文数,例如:121,22等。如果一个负数的绝对值左右完全对应,也是回文数,例如:-121,-22等。给定一个32位整数num,判断num是否是回文数。[要求]O(log10n)O(log_{10} n)O(log10n)输入描述:输入一个整数N.输出描述:若N是回文整数输出"Yes",否则输出"No"示例1输入121输出Yes示例2输入-121输出Yes示例3原创 2020-12-17 13:51:15 · 732 阅读 · 0 评论 -
1到n中1的出现次数
1到n中1的出现次数题目描述给定一个整数n,返回从1到n的数字中1出现的个数。例如:n=5,1∼nn=5, 1 \sim nn=5,1∼n为1, 2, 3, 4, 5。1,2,3,4,5。那么1出现了1次,所以返回1。n=11,1∼nn=11, 1 \sim nn=11,1∼n为1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11。1,2,3,4,5,6,7,8,9,10,11。那么1出现次数为1(出现1次),10(出现1次),11(有两个1,所以出现了2次),所以返回4。输入描述原创 2020-12-16 13:00:40 · 325 阅读 · 0 评论 -
一种字符串和数字的对应关系
#一种字符串和数字的对应关系题目描述:一个char类型的数组chs,其中所有的字符都不同。例如,chs = [‘A’, ‘B’, ‘C’, … ‘Z’],则字符串与整数的对应关系如下:A, B…Z, AA, AB… AZ, BA,BB…ZZ, AAA…ZZZ, AAAA…1, 2, .26,27, 28,… 52, 53. 54…702,703… 18278, 18279.例如,chs=[‘A’,‘B’,‘C’],则字符串与整数的对应关系如下:A, B, C, AA, AB…CC, AAA…原创 2020-12-15 15:47:53 · 2220 阅读 · 0 评论 -
累加出整个范围所有的数最少还需要几个数
累加出整个范围所有的数最少还需要几个数题目描述给定一个正数数组 arr\ arr arr 和一个正数 range\ range range ,可以选择 arr\ arr arr 中的任意个数字加起来的和为 sum\ sum sum 。返回最小需要往 arr\ arr arr 中添加几个数,使得 sum\ sum sum 可以取到 1∼range1 \sim range1原创 2020-12-14 20:47:48 · 250 阅读 · 0 评论 -
正数数组的最小不可组成和-进阶问题
正数数组的最小不可组成和-进阶问题题目描述给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的记为max在区间[min, max]上,如果有数不可以被arr某一个子集相加得到,那么其中最小的那个数是arr的最小不可组成和在区间[min, max]上,如果所有的数都可以被arr的某一个子集相加得到,那么max+1是arr的最小不可组成和请写函数返回正数数组arr的最小不可组成和保证1一定出现过!原创 2020-12-13 10:48:00 · 200 阅读 · 1 评论 -
正数数组的最小不可组成和
正数数组的最小不可组成和题目描述给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的记为max在区间[min, max]上,如果有数不可以被arr某一个子集相加得到,那么其中最小的那个数是arr的最小不可组成和在区间[min, max]上,如果所有的数都可以被arr的某一个子集相加得到,那么max+1是arr的最小不可组成和请写函数返回正数数组arr的最小不可组成和时间复杂度为O(n×∑i=1n原创 2020-12-12 16:15:54 · 142 阅读 · 0 评论 -
路径数组变为统计数组
路径数组变为统计数组题目描述给定一个路径统计数组paths,表示一张图。paths[i] == j代表城市i连向城市j,如果paths[i] == i,则表示i城市是首都,一张图里只会有一个首都且图中除首都指向自己之外不会有环。例如,paths=[9,1,4,9,0,4,8,9,0,1],代表的图如图9-14所示。由数组表示的图可以知道,城市1是首都,所以距离为0,离首都距离为1的城市只有城市9,离首都距离为2的城市有城市0、3和7,离首都距离为3的城市有城市4和8,离首都距离为4的城市有城市2、5和原创 2020-12-11 10:59:01 · 248 阅读 · 0 评论 -
并查集的实现
并查集的实现题目描述给定一个没有重复值的整形数组arr,初始时认为arr中每一个数各自都是一个单独的集合。请设计一种叫UnionFind的结构,并提供以下两个操作。boolean isSameSet(int a, int b): 查询a和b这两个数是否属于一个集合void union(int a, int b): 把a所在的集合与b所在的集合合并在一起,原本两个集合各自的元素以后都算作同一个集合[要求]如果调用isSameSet和union的总次数逼近或超过O(N),请做到单次调用isSam原创 2020-12-10 15:21:52 · 79 阅读 · 0 评论 -
LFU缓存结构设计
LFU缓存结构设计题目描述一个缓存结构需要实现如下功能。set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值但是缓存结构中最多放K条记录,如果新的第K+1条记录要加入,就需要根据策略删掉一条记录,然后才能把新记录加入。这个策略为:在缓存结构的K条记录中,哪一个key从进入缓存结构的时刻开始,被调用set或者get的次数最少,就删掉这个key的记录;如果调用次数最少的key有多个,上次调用发生最早的key被删除这就是LFU缓存原创 2020-12-09 17:04:19 · 348 阅读 · 0 评论 -
KMP算法
KMP算法题目描述给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有子串match,则返回match在str中的开始位置,不含有则返回-1若出现了多次,则按照升序输出所有出现位置[要求]时间复杂度为O(n)O(n)O(n)输入描述:第一行一个字符串str第二行一个字符串match输出描述:输出若干个数,分别为match在str中出现的位置,从0开始标号。若不存在输出-1示例1输入acbcbc输出2示例2输入acbcbcc原创 2020-12-08 20:17:29 · 111 阅读 · 0 评论