![](https://img-blog.csdnimg.cn/20200203195946680.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
程序员代码面试指南
跟随左神,走一遍算法与数据结构之路
python实现全代码
夜是故乡明
Java后端开发工程师
展开
-
括号字符串的有效性和最长有效长度
括号字符串的有效性和最长有效长度是否为整体有效的括号字符串遍历整个字符串`s`若遇到除'('和')'之外的字符,直接返回False;右圆括弧')'比左圆括弧'('多则直接返回False;遍历结束后,若左右圆括弧数量不相等则返回False,否则返回True。获取最长的有效括号子串动态规划,dp[i]表示以i结尾的有效括号子串最大长度。原创 2020-03-02 23:33:48 · 379 阅读 · 0 评论 -
添加最少字符使字符串整体都是回文字符串
添加最少字符使字符串整体都是回文字符串添加最少字符拼凑回文字符串动态规划,dp[i][j]为i到j任意添加字符构成回文的最少数量基于最长回文子序列字符串添加最少字符拼凑回文字符串基于最长回文子序列字符串slps,分别找到对应s中字符的位置,以此为界限;依次将左匹配边界和右匹配边界都添加到res里两侧,左匹配边界:[s_l, s_l_cur),右匹配边界(s_r_cur, s_r];在左里侧添加左匹配字符,在右里侧添加左匹配字符;循环直至slps所有字符完全匹配。原创 2020-03-02 10:35:09 · 984 阅读 · 0 评论 -
数组中两个字符串的最小距离
数组中两个字符串的最小距离一次O(N)查询遍历字符串数组,记录给出的两个字符串的最新位置,与最小距离比较,存储较小值时间复杂度为O(N)多次O(1)查询提前计算字符串数组中所有字符串之间的距离,并存储。时间复杂度为O(N^2),空间复杂度为O(N^2)两次哈希查询获取字符串数组中两个字符串间的最小距离时间复杂度为O(1)原创 2020-03-01 09:04:01 · 1171 阅读 · 0 评论 -
翻转字符串
翻转字符串翻转字符串单词顺序先将字符串整体翻转,再将每个单词翻转。时间复杂度为O(N),额外空间复杂度为O(1)字符串整体移动先将字符串整体翻转,再将右半区和左半区分别翻转。时间复杂度为O(N),额外空间复杂度为O(1)原创 2020-02-29 15:15:38 · 249 阅读 · 0 评论 -
替换与调整字符串
替换与调整字符串替换字符串统计左半区的总字符数量left_len,空格数量space_num替换后的长度为left_len + 2 * space_num从右往左,复制字符若为空格字符(' '),则依次复制'0','2','%'字符;否则复制相应的字符。调整字符串从右往左,复制字符遇见数字字符,复制;遇见“\*”字符,跳过;最终统一填充“\*”字符。原创 2020-02-29 10:50:28 · 426 阅读 · 2 评论 -
在有序但含有空的数组中查找字符串
在有序但含有空的数组中查找字符串有序含空数组查找字符串二分法查找遇见None向左遍历直至遇到非None匹配到s,将索引存储在res中,继续向左二分原创 2020-02-28 23:28:06 · 131 阅读 · 0 评论 -
判断字符数组中是否所有的字符都只出现过一次
判断字符数组中是否所有的字符都只出现过一次判断字符是否唯一字典实现,时间复杂度为O(N),空间复杂度为O(N);先堆排序,再查看相邻字符是否相同,时间复杂度为O(NlogN),空间复杂度为O(1)原创 2020-02-28 16:47:19 · 302 阅读 · 0 评论 -
字符串的统计字符串
字符串的统计字符串统计字符串每次遇见不相同的相邻字符时,拼接其数量最后再拼接最后一个字符的数量检索统计字符串若字符总和超过索引,则返回对应的字母字符;否则返回0(表示空字符)。原创 2020-02-28 12:23:56 · 466 阅读 · 0 评论 -
替换字符串中连续出现的指定字符串
替换字符串中连续出现的指定字符串替换连续字符串连续出现的指定字符串只替换一次指定字符串替换为连续的0,连续出现的指定字符串则也为连续的0每次在第一次出现0时,将保留的字符串和替换字符串陆续拼接原创 2020-02-27 22:23:39 · 485 阅读 · 0 评论 -
将整数字符串转成整数值
将整数字符串转成整数值整数字符串抓换为整型判断字符串s是否符合整数书写规范;判断字符串s抓换的整数是否在整型范围内;若满足两者条件,则返回其对应整型值,否则返回0。时间复杂度为O(N)注意java整数数据范围和python eval的用法也可以num=num*10+s[i]本地实现转换为整数原创 2020-02-27 17:54:53 · 815 阅读 · 0 评论 -
判断两个字符串是否互为旋转词
判断两个字符串是否互为旋转词字符串自行拼接,包含自身的所有旋转词,其中任意长度为n的子串都是旋转词,n为字符串的长度即判断一个字符串是否在另一个自行拼接的字符串中,即可判断两个字符串是否互为旋转词两个字符串匹配使用KMP算法本地实现字符串库函数实现find()和index()原创 2020-02-27 10:13:27 · 583 阅读 · 0 评论 -
字符串匹配
字符串匹配返回子串在字符串的起始位置暴力遍历时间复杂度为O(M*N)KMP算法获取前缀,后缀字符串最大重叠长度数组加速匹配,求子串在字符串的起始位置时间复杂度为O(N)原创 2020-02-26 21:54:27 · 204 阅读 · 0 评论 -
最长回文子串
最长回文子串获取最长回文子串末尾添加最短字符串构成回文串Manacher算法(马拉车算法)原创 2020-02-25 22:23:44 · 125 阅读 · 0 评论 -
去掉字符串中连续出现k个0的子串
去掉字符串中连续出现k个0的子串去掉连续k个0的子串创建字符串s对应的字符数组arrcount统计连续'0'字符个数,index统计连续'0'字符起始索引遍历arr,遇到'0'字符统计数量;遇到非'0'字符判断之前连续'0'字符个数是否为k,若为k,则将arr中index ~ index + k -1全部置换为'';最后返回字符数组arr构成的字符串。时间复杂度为O(N),空间复杂度为O(len(s))原创 2020-02-24 14:13:25 · 175 阅读 · 0 评论 -
字符串中数字子串求和
字符串中数字子串求和1. 数字子串全为整数;2. 偶数个'-'为正,奇数个'-'为负;3. 其他字符无特殊含义res记录求和结果,num记录当前整数,flag记录其符号遍历字符串s,数字字符出现时记录当前数至num,非数字字符出现时累加当前数至res,根据'-'的个数记录num的符号最后一个字符可能是数字,此时刚记录完num,需再次将num结果累计至res,防止遗漏原创 2020-02-23 23:59:50 · 530 阅读 · 0 评论 -
判断两个字符串是否互为变形词
判断两个字符串是否互为变形词统计字符串str1的种类及数量,再与str2进行对比。1. 比较字符串长度,长度不同,则返回False;2. 统计str1,字符及对应数量递增;3. 对比str2,字符及对应数量递减;4. 对比过程中,发现字符种类不存在或者数量递减至负数,则返回False;5. 对比完成,两者字符串长度相同,又不存在字符种类不同及数量不对齐情况,则说明两者互为变形词,返回True。若字符串只包含ASCII字符,创建长度为256的数组若字符串包含广义unicode字符,创建字典原创 2020-02-23 22:30:19 · 311 阅读 · 0 评论 -
位运算题集
位运算题集多做,多用笔纸演算,多想不用额外变量交换两个整数的值不用任何比较判断找出两个数中较大的数用位运算不用算术运算实现整数的加减乘除运算整数的二进制表达中有多少个1在其他数都出现偶数次的数组中找到出现奇数次的数整型数组中其他数出现k次找出只出现1次的数原创 2020-02-22 22:23:57 · 144 阅读 · 0 评论 -
不用额外变量交换两个整数的值
不用额外变量交换两个整数的值位运算交换两个数加法交换两数异或交换两数python实现原创 2020-02-22 22:07:39 · 222 阅读 · 0 评论 -
不用任何比较判断找出两个数中较大的数
不用任何比较判断找出两个数中较大的数位运算找出两整型较大值判断转换位运算同号时判断a-b的符号位异号时符号位与被减数相同python实现原创 2020-02-22 20:09:18 · 431 阅读 · 0 评论 -
用位运算不用算术运算实现整数的加减乘除运算
只用位运算不用算术运算实现整数的加减乘除运算位运算实现整型算术运算:加法,减法,乘法和除法真实算术运算结果,无溢出python实现原创 2020-02-22 15:40:11 · 744 阅读 · 0 评论 -
整数的二进制表达中有多少个1
整数的二进制表达中有多少个1统计整型的二进制表达中1的个数无符号右移按位与移除最右侧1平行算法原创 2020-02-21 21:41:27 · 204 阅读 · 0 评论 -
在其他数都出现偶数次的数组中找到出现奇数次的数
在其他数都出现偶数次的数组中找到出现奇数次的数整型数组中其他数都出现偶数次找到唯一出现奇数次的数偶数次异或为0,奇数次异或为本身遍历数组异或结果即为唯一出现奇数次的数整型数组中其他数都出现偶数次找到两个出现奇数次的数遍历数组异或结果为二者异或结果以结果最右边的1为标准筛选数组中的值进行异或,可得到两者中的一个数,再与结果异或可得到另一个数原创 2020-02-20 20:44:26 · 372 阅读 · 0 评论 -
整型数组中其他数出现k次找出只出现1次的数
在其他数都出现k次的数组中找到只出现一次的数整型数组中其他数都出现k次找到唯一出现1次的数无进位k进制求和注意整型包括负数,k进制数组转换需要使用取余操作。java:向上取余python:向下取余解决方法1. abs(num) < k即停止取余操作;2. 无进位相加时保留符号位,将绝对值取余,再添加符号位。原创 2020-02-20 19:18:37 · 616 阅读 · 0 评论 -
整型数字的英文表达和中文表达
整型数字的英文表达和中文表达有符号32位整数的英文表达和中文表达考察业务逻辑能力,将阿拉伯数字以英文和中文表达显示英文表达以三个数字为一组,依次为Billion, Million, Thousand,三个数字内对应1 ~ 999,1~19,20,30,40,50,60,70,80,90有特定英文单词,其余由前面特定的英文单词拼接;中文表达以四个数字为一组,依次为亿, 万,四个数字内对应1 ~ 9999,依次为千,百,十,个位为一、二、三、四、五、六、七、八、九,为每个单位的数值表示。原创 2020-02-15 17:57:40 · 1408 阅读 · 0 评论 -
有序旋转数组最小值
在有序旋转数组中找到最小值升序旋转数组最多下降一次值(散点构成的两条向上的直线)二分查找升序旋转数组中找到最大值:先找到最小值的索引,最小值前一位就是最大值原创 2020-02-14 17:50:32 · 199 阅读 · 0 评论 -
回文数判断
回文数判断判断一个数是否是回文数首先求绝对值,统一转换为非负数;对于非负数,判断最高位和最低位是否相等,相等则继续判断中间数是否回文数。原创 2020-02-13 21:28:26 · 471 阅读 · 0 评论 -
从N个数中等概率打印M个数
从N个数中等概率打印M个数与最后一个位置的数值交换很多有关等概率随机的题目沿用这个思路,例如等概率随机快速获取key的结构。原创 2020-02-13 19:59:16 · 187 阅读 · 0 评论 -
1到n中1出现的次数
1到n中数字1出现的次数给定一个整数n,返回从1到n的数字中1出现的个数暴力遍历:O(NlogN)计数规律:O(logN*logN)整体范围划分为部分范围,再求和;部分范围为最高位与其他位之和原创 2020-02-13 12:58:18 · 664 阅读 · 0 评论 -
伪K进制字符串与数字对应
一种字符串和数字的对应关系伪K进制字符串与数字对应字符数组包含不同的字符,生成相对应的数值关系保证每个位置上的数至少为1数字转换为字符串字符串转换为数字原创 2020-02-12 12:15:04 · 315 阅读 · 0 评论 -
正数数组的最小不可组成和
正数数组的最小不可组成和正整数数组的最小不可组成和 暴力递归求出每一个非空子集的累加和动态规划数组前i个累加值递推出前i+1个累加值包含1的正整数数组的最小不可组成和可组成和范围scale则从0开始扩大若scale + 1 >= arr[i],则扩大范围否则找到正数数组最小不可组成和——scale + 1。原创 2020-02-11 09:00:01 · 1490 阅读 · 0 评论 -
距离首都距离
路径数组转化为统计数组距离首都距离paths[i]==j代表城市i连向城市j,nums[i]==j代表距离首都为i的城市有j座1.路径数组转换为距离数组2.距离数组转换为统计数组时间复杂度为O(N),额外空间复杂度为O(1)原创 2020-02-09 12:44:19 · 363 阅读 · 0 评论 -
区间上的数出现概率指数变化
调整区间上数出现的概率区间上的数出现概率指数变化求k次random()结果中的最大值原创 2020-02-08 14:44:37 · 296 阅读 · 0 评论 -
RandomPool等概率随机快速获取key
RandomPool等概率随机快速获取keykey_num_map和num_key_map在移除给定的key时,需要调整对应的num和count原创 2020-02-08 12:29:57 · 266 阅读 · 0 评论 -
最近使用容量为K的缓存结构
设计结构最近使用容量为K的缓存结构LRU(Least Recently Used):最近最少使用算法。keyNodeMap哈希表存储记录(key,value),value存储在Node中;双端队列按head到tail存储Node(value)的使用顺序;nodeKeyMap哈希表根据Node获取key,维护O(1)删除keyNodeMap记录(使容量不超过K)原创 2020-02-07 20:04:55 · 279 阅读 · 0 评论 -
左右划分最大值距离
左右划分最大值距离最大的leftMax与rightMax之差的绝对值常规解法进阶解法最优解法原创 2020-02-07 11:14:40 · 228 阅读 · 0 评论 -
统一设置值的哈希表
哈希表统一设置值,时间复杂度为O(1)使用时间戳,靠近后面时间的值为真实值本质上为延迟操作,将setAll操作的执行时间分散到get操作的比较时间中。因此存储在哈希表中的数据与真实数据存在不一致(有可能是setAll中的值)原创 2020-02-06 19:25:21 · 179 阅读 · 0 评论 -
等概率放球
等概率放球蓄水池算法:动态等概率抽样蓄水池算法保证每次抽样的公平性,对于第i次抽样,每个样本被抽中的概率相同——K/i,其中K为蓄水池容量。最终每个样本被抽中的概率为K/N,其中N为总样本数。N可以不确定,换言之,可以一直抽样,随时喊停,也能保证抽样的等概率。原创 2020-02-06 14:14:58 · 376 阅读 · 0 评论 -
打印折纸凹凸痕迹
折纸问题,打印凹凸痕迹 下下 上产生第i+1次折痕的过程,就是在对折i次产生的每一条折痕的左右两侧,依次插入下折痕和上折痕的过程。中序遍历:左 头 右原创 2020-02-05 16:11:09 · 702 阅读 · 0 评论 -
判断一个点是否在三角形内部
判断一个点是否在三角形内部解法1:面积法利用点在三角形内外侧的相对面积关系根据海伦公式,使用三角形边长求出其面积解法2:向量法使用叉积判断点的相对方位原创 2020-02-05 14:39:13 · 4027 阅读 · 2 评论 -
判断一个点是否在矩形内部
判断一个点是否在矩形内部首先,对于边平行于坐标轴的矩形,极易判断。通过旋转坐标轴,使一般矩形变成边平行于坐标轴的矩形,当然点的坐标会发生相应改变。拓展:使用叉积依次对每条直线判断侧方位,也可判断一个点是否在多边形内部/外部。原创 2020-02-05 11:59:14 · 4315 阅读 · 0 评论