Coding Interview Guide
Coding Interview Guide
做人,最重要的就是开心嘛!
你整天瘫在床上,不学习不运动,幻想天上掉馅饼,白天遇事唯唯诺诺,晚上熬夜为情伤感,怀念那点鸡毛蒜皮的小事,这样的你凭什么还认为自己自命不凡?彻底认命摆烂,和自己和解的人很快乐;时刻努力奋斗向上,和人生搏斗的人也很快乐;只有在这两种选择之间摇摆不定、意志不定的人最可悲,也最痛苦。
展开
-
【困难】邮局选址问题-Java:解法二
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 邮局选址问题 * * 【题目】 * 一条直线上有居民点,邮局只能建在居民点上。给定一个有序整型数组arr,每个值表示居民点的一维坐标,再给定一个正数num,表 * 示邮局数量。选择num个居民点建立num个邮局,使所有的居民点到邮局的总距离最短,返回最短的总距离。 * * 【举例】 * arr=[1,2,3,4,5,1000],num=2。原创 2023-05-07 20:17:26 · 443 阅读 · 2 评论 -
【困难】邮局选址问题-Java:解法一
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 邮局选址问题 * * 【题目】 * 一条直线上有居民点,邮局只能建在居民点上。给定一个有序整型数组arr,每个值表示居民点的一维坐标,再给定一个正数num,表 * 示邮局数量。选择num个居民点建立num个邮局,使所有的居民点到邮局的总距离最短,返回最短的总距离。 * * 【举例】 * arr=[1,2,3,4,5,1000],num=2。原创 2023-05-07 20:15:43 · 499 阅读 · 0 评论 -
【困难】画匠问题-Java:解法三
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 画匠问题 * * 【题目】 * 给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个整数num表示画匠的数量,每个画匠只 * 能画连在一起的画作。所有的画家并行工作,请返回完成所有的画作需要的最少时间。 * * 【举例】 * arr=[3,1,4],num=2。 * 最好的分配方式为第一个画匠画3和1,所需原创 2023-05-07 12:30:06 · 133 阅读 · 0 评论 -
【困难】画匠问题-Java:解法二
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 画匠问题 * * 【题目】 * 给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个整数num表示画匠的数量,每个画匠只 * 能画连在一起的画作。所有的画家并行工作,请返回完成所有的画作需要的最少时间。 * * 【举例】 * arr=[3,1,4],num=2。 * 最好的分配方式为第一个画匠画3和1,所需原创 2023-05-07 12:28:16 · 123 阅读 · 0 评论 -
【困难】画匠问题-Java:解法一
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 画匠问题 * * 【题目】 * 给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个整数num表示画匠的数量,每个画匠只 * 能画连在一起的画作。所有的画家并行工作,请返回完成所有的画作需要的最少时间。 * * 【举例】 * arr=[3,1,4],num=2。 * 最好的分配方式为第一个画匠画3和1,所需原创 2023-05-07 12:24:37 · 164 阅读 · 0 评论 -
【困难】丟棋子问题-Java:解法五
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 丟棋子问题 * * 【题目】 * 一座大楼有0~N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会 * 摔碎(1≤i≤N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔 * 的最少次数。一次只能扔一个棋子。 * * 【举例】原创 2023-05-05 20:07:00 · 588 阅读 · 0 评论 -
【困难】丟棋子问题-Java:解法四
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 丟棋子问题 * * 【题目】 * 一座大楼有0~N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会 * 摔碎(1≤i≤N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔 * 的最少次数。一次只能扔一个棋子。 * * 【举例】原创 2023-05-05 20:05:45 · 567 阅读 · 0 评论 -
【困难】丟棋子问题-Java:解法三
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 丟棋子问题 * * 【题目】 * 一座大楼有0~N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会 * 摔碎(1≤i≤N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔 * 的最少次数。一次只能扔一个棋子。 * * 【举例】原创 2023-05-05 20:03:04 · 551 阅读 · 0 评论 -
【困难】丟棋子问题-Java:解法二
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 丟棋子问题 * * 【题目】 * 一座大楼有0~N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会 * 摔碎(1≤i≤N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔 * 的最少次数。一次只能扔一个棋子。 * * 【举例】原创 2023-05-05 20:00:48 · 546 阅读 · 0 评论 -
【困难】丟棋子问题-Java:解法一
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 丟棋子问题 * * 【题目】 * 一座大楼有0~N层,地面算作第0层,最高的一层为第N层。已知棋子从第0层掉落肯定不会摔碎,从第i层掉落可能会摔碎,也可能不会 * 摔碎(1≤i≤N)。给定整数N作为楼层数,再给定整数K作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔 * 的最少次数。一次只能扔一个棋子。 * * 【举例】原创 2023-05-05 19:58:42 · 503 阅读 · 0 评论 -
【相当困难】KMP算法-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * KMP算法 * * 【题目】 * 给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有子串match,则返回match在str中的开始位 * 置,不含有则返回-1。 * * 【举例】 * str="acbc",match="bc",返回2。 * str="acbc",match="bcc",返回-1。原创 2023-05-03 21:52:21 · 212 阅读 · 1 评论 -
【相当困难】Manacher算法-Java:进阶问题
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * Manacher算法 * * 【题目】 * 给定一个字符串str,返回str中最长回文子串的长度。 * * 【举例】 * str="123",其中的最长回文子串为"1"、"2"或者"3",所以返回1。 * str="abc1234321ab",其中的最长回文子串为"1234321",所以返回7。 * * 【进阶题目】 * 给定一个字符串原创 2023-05-03 20:32:54 · 528 阅读 · 0 评论 -
【相当困难】Manacher算法-Java:原问题
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * Manacher算法 * * 【题目】 * 给定一个字符串str,返回str中最长回文子串的长度。 * * 【举例】 * str="123",其中的最长回文子串为"1"、"2"或者"3",所以返回1。 * str="abc1234321ab",其中的最长回文子串为"1234321",所以返回7。 * * 【进阶题目】 * 给定一个字符串原创 2023-05-03 20:24:36 · 588 阅读 · 0 评论 -
【困难】出现次数的TOPK问题-Java:进阶问题
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.HashMap;/** * 出现次数的TOPK问题 * * 【题目】 * 给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印出现次数前k名的字符串。 * * 【举例】 * strArr=["1","2","3","4"],k=2 * No.1: 1, times: 1 * No.2: 2,原创 2023-05-03 16:05:22 · 187 阅读 · 0 评论 -
【中等】出现次数的TOPK问题-Java:原问题
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.HashMap;import java.util.Map;/** * 出现次数的TOPK问题 * * 【题目】 * 给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印出现次数前k名的字符串。 * * 【举例】 * strArr=["1","2","3","4"],k=2 * No.1: 1原创 2023-05-03 14:26:44 · 506 阅读 · 0 评论 -
【中等】两个有序数组间相加和的TOPK问题-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.Arrays;import java.util.HashSet;/** * 两个有序数组间相加和的TOPK问题 * * 【题目】 * 给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数 * 组。 * * 【举例】 * arr1=[1,原创 2023-05-03 12:49:39 · 242 阅读 · 0 评论 -
【相当困难】在两个排序数组中找到第K小的数-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 在两个排序数组中找到第K小的数 * * 【题目】 * 给定两个有序数组arr1和arr2,再给定一个整数K,返回所有的数中第K小的数。 * * 【举例】 * arr1=[1,2,3,4,5],arr2=[3,4,5],k=1。 * 1是所有数中第1小的数,所以返回1。 * arr1=[1,2,3],arr2=[3,4,5,6],k=4。原创 2023-05-03 09:33:10 · 190 阅读 · 0 评论 -
【中等】在两个长度相等的排序数组中找到上中位数-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 在两个长度相等的排序数组中找到上中位数 * * 【题目】 * 给定两个有序数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。 * * 【举例】 * arr1=[1,2,3,4],arr2=[3,4,5,6] * 总共有8个数,那么上中位数是第4小的数,所以返回3。 * arr1=[0,1,2],arr2=[3,原创 2023-05-02 13:35:25 · 151 阅读 · 0 评论 -
【相当困难】随时找到数据流的中位数-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.Comparator;import live.every.day.ProgrammingDesign.CodingInterviewGuide.Other .DesignOneNoCapacityExpansionBurdenHeapStructure.MyHeap;/** * 随时找到数据流的中位数 *原创 2023-05-02 11:19:24 · 113 阅读 · 0 评论 -
【相当困难】设计一个没有扩容负担的堆结构-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.Comparator;/** * 设计一个没有扩容负担的堆结构 * * 【题目】 * 堆结构一般是使用固定长度的数组结构来实现的。这样的实现虽然足够经典,但存在扩容的负担,比如不断向堆中增加元素,使得固定 * 数组快耗尽时,就不得不申请一个更大的固定数组,然后把原来数组中的对象复制到新的数组里完成堆的扩容,所以,如果扩容时原创 2023-05-02 10:30:17 · 92 阅读 · 0 评论 -
【中等】一种消息接收并打印的结构设计-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.HashMap;/** * 一种消息接收并打印的结构设计 * * 【题目】 * 消息流吐出2,一种结构接收而不打印2,因为1还没出现。 * 消息流吐出1,一种结构接收1,并且打印:1,2。 * 消息流吐出4,一种结构接收而不打印4,因为3还没出现。 * 消息流吐出5,一种结构按收而不打印5,因为3还没出现。 * 消息原创 2023-05-01 21:18:16 · 89 阅读 · 0 评论 -
【困难】分糖果问题-Java:进阶问题
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 分糖果问题 * * 【题目】 * 一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下: * 1.每个孩子不管得分多少,起码分到1个糖果。 * 2.任意两个相邻的孩子之间,得分较多的孩子必须拿多一些的糖果。 * 给定一个数组arr代表得分数组,请返回最少需要多少糖果。 * 例如:arr=[1,2,2],糖果分配为[1,2,1],即可满足要求原创 2023-05-01 18:38:08 · 197 阅读 · 1 评论 -
【困难】分糖果问题-Java:原问题
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 分糖果问题 * * 【题目】 * 一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下: * 1.每个孩子不管得分多少,起码分到1个糖果。 * 2.任意两个相邻的孩子之间,得分较多的孩子必须拿多一些的糖果。 * 给定一个数组arr代表得分数组,请返回最少需要多少糖果。 * 例如:arr=[1,2,2],糖果分配为[1,2,1],即可满足要求原创 2023-05-01 08:38:07 · 350 阅读 · 0 评论 -
【困难】数字的英文表达和中文表达-Java:数字的中文表达
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 数字的英文表达和中文表达 * * 【题目】 * 给定一个32位整数num,写两个函数分别返回num的英文与中文表达字符串。 * * 【举例】 * num=319 * 英文表达字符串为:Three Hundred Nineteen * 中文表达字符串为:三百一十九 * * num=1014 * 英文表达字符串为:One Thousand原创 2023-04-30 22:07:44 · 100 阅读 · 0 评论 -
【困难】数字的英文表达和中文表达-Java:数字的英文表达
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 数字的英文表达和中文表达 * * 【题目】 * 给定一个32位整数num,写两个函数分别返回num的英文与中文表达字符串。 * * 【举例】 * num=319 * 英文表达字符串为:Three Hundred Nineteen * 中文表达字符串为:三百一十九 * * num=1014 * 英文表达字符串为:One Thousand原创 2023-04-30 18:36:18 · 116 阅读 · 0 评论 -
【中等】在有序旋转数组中找到一个数-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 在有序旋转数组中找到一个数 * * 【题目】 * 有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1,2,3,4,5,6,7],可以旋转处理成 * [4,5,6,7,1,2,3]等。给定一个可能旋转过的有序数组arr,再给定一个数num,返回arr中是否含有num。 * * 【难度】 * 中等 *原创 2023-04-29 21:47:20 · 132 阅读 · 0 评论 -
【中等】在有序旋转数组中找到最小值-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 在有序旋转数组中找到最小值 * * 【题目】 * 有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1,2,3,4,5,6,7],可以旋转处理成 * [4,5,6,7,1,2,3]等。给定一个可能旋转过的有序数组arr,返回arr中的最小值。 * * 【难度】 * 中等 * * 【解答】 * 为了原创 2023-04-29 21:15:33 · 88 阅读 · 0 评论 -
【简单】判断一个数是否是回文数-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 判断一个数是否是回文数 * * 【题目】 * 定义回文数的概念如下: * •如果一个非负数左右完全对应,则该数是回文数,例如:121,22等。 * •如果一个负数的绝对值左右完全对应,也是回文数,例如:-121,-22等。 * 给定一个32位整数num,判断num是否是回文数。 * * 【难度】 * 简单 * * 【解答】 * 本题原创 2022-01-31 11:17:38 · 1521 阅读 · 0 评论 -
【简单】从N个数中等概率打印M个数-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 从N个数中等概率打印M个数 * * 【题目】 * 给定一个长度为N且没有重复元素的数组arr和一个整数n,实现函数等概率随机打印arr中的M个数。 * * 【要求】 * 1.相同的数不要重复打印。 * 2.时间复杂度为O(M),额外空间复杂度为O(1)。 * 3.可以改变arr数组。 * * 【难度】 * 简单 * * 【解答】原创 2022-01-31 11:05:48 · 874 阅读 · 0 评论 -
【困难】1到n中1出现的次数-Java:解法二
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 1到n中1出现的次数 * * 【题目】 * 给定一个整数1,返回从1到n的数字中1出现的个数。 * 例如: * n=5,l~n为1,2,3,4,5。那么1出现了1次,所以返回1。 * n=11,1~n为1,2,3,4,5,6,7,8,9,10,11。那么1出现的次数为1(出现1次),10(出现1次),11(有两个1,所以出现了 * 2次),所原创 2023-04-29 20:18:39 · 89 阅读 · 0 评论 -
【困难】1到n中1出现的次数-Java:解法一
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 1到n中1出现的次数 * * 【题目】 * 给定一个整数1,返回从1到n的数字中1出现的个数。 * 例如: * n=5,l~n为1,2,3,4,5。那么1出现了1次,所以返回1。 * n=11,1~n为1,2,3,4,5,6,7,8,9,10,11。那么1出现的次数为1(出现1次),10(出现1次),11(有两个1,所以出现了 * 2次),所原创 2023-04-29 20:16:35 · 119 阅读 · 0 评论 -
【困难】一种字符串和数字的对应关系-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 一种字符串和数字的对应关系 * * 【题目】 * 一个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原创 2023-04-29 08:48:21 · 199 阅读 · 0 评论 -
【中等】正数数组的最小不可组成和-Java:进阶问题
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.Arrays;/** * 正数数组的最小不可组成和 * * 【题目】 * 给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念: * •把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的max。 * •在区间[min,max]上,如果有数不可以被arr某一个子集相加得到,那么原创 2023-04-26 21:29:08 · 104 阅读 · 0 评论 -
【中等】正数数组的最小不可组成和-Java:原问题解法二
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 正数数组的最小不可组成和 * * 【题目】 * 给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念: * •把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的max。 * •在区间[min,max]上,如果有数不可以被arr某一个子集相加得到,那么其中最小的那个数是arr的最小不可组成和。 * •原创 2023-04-26 21:26:35 · 102 阅读 · 0 评论 -
【中等】正数数组的最小不可组成和-Java:原问题解法一
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.HashSet;/** * 正数数组的最小不可组成和 * * 【题目】 * 给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念: * •把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的max。 * •在区间[min,max]上,如果有数不可以被arr某一个子集相加得到,那原创 2023-04-26 21:15:05 · 108 阅读 · 0 评论 -
【困难】路径数组变为统计数组-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.Arrays;/** * 路径数组变为统计数组 * * 【题目】 * 给定一个路径数组paths,表示一张图。paths[i]==j代表城市i连向城市j,如果paths[i]==i,则表示i城市是首都,一张图里只 * 会有一个首都且图中除首都指向自己之外不会有环。例如,paths=[9,1,4,9,0,4,8,9,0,1]原创 2023-04-24 22:08:11 · 121 阅读 · 1 评论 -
【简单】调整[0,x)区间上的数出现的概率-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 调整[0,x)区间上的数出现的概率 * * 【题目】 * 假设函数Math.random()等概率随机返回一个在[0,1)范围上的数,那么我们知道,在[0,x)区间上的数出现的概率为x(0原创 2022-01-31 10:44:35 · 602 阅读 · 0 评论 -
【中等】设计RandomPool结构-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.HashMap;/** * 设计RandomPool结构 * * 【题目】 * 设计一种结构,在该结构中有如下三个功能: * •insert(key):将某个key加入到该结构,做到不重复加入。 * •delete(key):将原本在结构中的某个key移除。 * •getRandom():等概率随机返回结构中的任何一个原创 2023-04-24 19:49:18 · 87 阅读 · 0 评论 -
【中等】设计可以变更的缓存结构-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;import java.util.HashMap;/** * 设计可以变更的缓存结构 * * 【题目】 * 设计一种缓存结构,该结构在构造时确定大小,假设大小为K,并有两个功能: * •set(key,value):将记录(key,value)插入该结构。 * •get(key):返回key对应的value值。 * * 【要求】 * 1.set和g原创 2023-04-22 22:06:52 · 3878 阅读 · 1 评论 -
【困难】最大的leftMax与rightMax之差的绝对值-Java:解法三
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/** * 最大的leftMax与rightMax之差的绝对值 * * 【题目】 * 给定一个长度为N(N>1)的整型数组arr,可以划分成左右两个部分,左部分为arr[0...K],右部分为arr[K+1...N-1],K可以取 * 值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值中,最大是多少? * 例如:[2,7,原创 2023-04-22 21:16:34 · 76 阅读 · 0 评论