![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
程序员面试金典
无
阿飞算法
这个作者很懒,什么都没留下…
展开
-
面试题 08.06. 汉诺塔问题
面试题 08.06. 汉诺塔问题原创 2022-06-12 09:42:15 · 93 阅读 · 0 评论 -
面试题 17.23. 最大黑方阵
面试题 17.23. 最大黑方阵给定一个方阵,其中每个单元(像素)非黑即白。设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号,size 是子方阵的边长。若有多个满足条件的子方阵,返回 r 最小的,若 r 相同,返回 c 最小的子方阵。若无满足条件的子方阵,返回空数组。示例 1:输入:[ [1,0,1], [0,0,1],原创 2021-06-10 19:14:35 · 137 阅读 · 0 评论 -
面试题 16.13. 平分正方形
面试题 16.13. 平分正方形给定两个正方形及一个二维平面。请找出将这两个正方形分割成两半的一条直线。假设正方形顶边和底边与 x 轴平行。每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] = [square[0],square[1]],以及正方形的边长square[2]。所求直线穿过两个正方形会形成4个交点,请返回4个交点形成线段的两端点坐标(两个端点即为4个交点中距离最远的2个点,这2个点所连成的线段一定会穿过另外2个交点)。2个端点坐标[X1,Y1]和[X2,Y2]的返回原创 2021-06-10 10:04:13 · 145 阅读 · 0 评论 -
面试题 16.04. 井字游戏
面试题 16.04. 井字游戏以下是井字游戏的规则:玩家轮流将字符放入空位(" ")中。第一个玩家总是放字符"O",且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。当所有位置非空时,也算为游戏结束。如果游戏结束,玩家不允许再放置字符。如果游戏存在获胜者,就返回该游戏的获胜者使用的字符("X"或"O");如果游戏以平局结束,则返回 "Draw";如果仍会有行原创 2021-06-09 22:39:10 · 206 阅读 · 1 评论 -
面试题 02.04. 分割链表
面试题 02.04. 分割链表编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8方法1:双指针/交换值/** *原创 2021-06-03 22:57:26 · 81 阅读 · 2 评论 -
面试题 17.15. 最长单词
面试题 17.15. 最长单词给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。示例:输入: ["cat","banana","dog","nana","walk","walker","dogwalker"]输出: "dogwalker"解释: "dogwalker"可由"dog"和"walker"组成。提示:0 <= len(words) <原创 2021-06-03 19:35:32 · 777 阅读 · 0 评论 -
面试题 10.05. 稀疏数组搜索
面试题 10.05. 稀疏数组搜索稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。示例1: 输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta" 输出:-1 说明: 不存在返回-1。示例2: 输入:words = ["at", "", "", "", "ball", "", "", "car", "", "","dad",原创 2021-05-28 09:45:33 · 65 阅读 · 0 评论 -
面试题 05.01. 插入
面试题 05.01. 插入给定两个整型数字 N 与 M,以及表示比特位置的 i 与 j(i <= j,且从 0 位开始计算)。编写一种方法,使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域,不足之处用 0 补齐。具体插入过程如图所示。题目保证从 i 位到 j 位足以容纳 M, 例如: M = 10011,则 i~j 区域至少可容纳 5 位。示例1: 输入:N = 1024(10000000000), M = 19(10011), i = 2, j = 6原创 2021-05-27 09:16:02 · 76 阅读 · 0 评论 -
面试题 03.06. 动物收容所
面试题 03.06. 动物收容所动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。enqueue方法有一个原创 2021-05-27 08:16:27 · 76 阅读 · 0 评论 -
面试题 04.01. 节点间通路
面试题 04.01. 节点间通路面试题 04.01. 节点间通路节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1: 输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 输出:true示例2: 输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2,原创 2021-05-22 15:42:11 · 110 阅读 · 0 评论 -
面试题 08.05. 递归乘法
面试题 08.05. 递归乘法递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。示例1: 输入:A = 1, B = 10 输出:10示例2: 输入:A = 3, B = 4 输出:12提示:保证乘法范围不会溢出方法1:递归public int multiply(int A, int B) { //保持A小于B if (A > B) { int T = A;原创 2021-05-21 08:44:11 · 121 阅读 · 0 评论 -
面试题 01.05. 一次编辑
面试题 01.05. 一次编辑字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。 示例 1:输入: first = "pale"second = "ple"输出: True 示例 2:输入: first = "pales"second = "pal"输出: False方法1:一次遍历public boolean oneEditAway(St原创 2021-05-21 08:18:26 · 79 阅读 · 0 评论 -
面试题 16.20. T9键盘
面试题 16.20. T9键盘在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列,实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示:示例 1:输入: num = "8733", words = ["tree", "used"]输出: ["tree", "used"]示例 2:输入: num = "2", words = ["a", "b", "c", "d"]输出: ["a", "b",原创 2021-05-20 20:12:16 · 140 阅读 · 0 评论 -
面试题 08.09. 括号
面试题 08.09. 括号括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。说明:解集不能包含重复的子集。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]方法1:回溯+自底向上 List<String> res = new ArrayList<>(); int n; pub原创 2021-05-20 09:02:42 · 65 阅读 · 0 评论 -
面试题 10.09. 排序矩阵查找
面试题 10.09. 排序矩阵查找给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 target 原创 2021-05-20 08:27:14 · 136 阅读 · 0 评论 -
面试题 01.07. 旋转矩阵
面试题 01.07. 旋转矩阵给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到? 示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定 matrix =[ [ 5, 1, 9,11], [ 2, 4, 8原创 2021-05-19 22:34:52 · 65 阅读 · 0 评论 -
面试题 01.08. 零矩阵
面试题 01.08. 零矩阵编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。 示例 1:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入:[ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出:[ [0,0,0,0], [0,4,5,0], [0,3,1,0]]方法1:一维数组标原创 2021-05-19 20:40:23 · 75 阅读 · 0 评论 -
面试题 17.22. 单词转换
面试题 17.22. 单词转换给定字典中的两个词,长度相等。写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到。编写一个程序,返回一个可能的转换序列。如有多个可能的转换序列,你可以返回任何一个。示例 1:输入:beginWord = "hit",endWord = "cog",wordList = ["hot","dot","dog","lot","log","cog"]输出:["hit","hot","dot","lot","lo原创 2021-05-19 08:52:59 · 175 阅读 · 0 评论 -
面试题 01.01. 判定字符是否唯一
面试题 01.01. 判定字符是否唯一实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = "leetcode"输出: false 示例 2:输入: s = "abc"输出: true限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。方法1:Hashpublic boolean isUnique(String astr) { char[] ch = new char[26]; for (原创 2021-05-18 20:57:06 · 58 阅读 · 0 评论 -
面试题 17.05. 字母与数字
面试题 17.05. 字母与数字面试题 17.05. 字母与数字给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同。返回该子数组,若存在多个最长子数组,返回左端点下标值最小的子数组。若不存在这样的数组,返回一个空数组。示例 1:输入: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7","H","I","J","K","L","M"]输出: ["A","1","B","C","D","2","3"原创 2021-05-18 20:03:12 · 149 阅读 · 0 评论 -
面试题 17.07. 婴儿名字
面试题 17.07. 婴儿名字每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量。有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来。给定两个列表,一个是名字及对应的频率,另一个是本质相同的名字对。设计一个算法打印出每个真实名字的实际频率。注意,如果 John 和 Jon 是相同的,并且 Jon 和 Johnny 相同,则 John 与 Johnny 也相同,即它们有传递和对称性。在结果列表中,选择 字典序最小 的名字作为真实名字原创 2021-05-18 19:16:46 · 115 阅读 · 0 评论 -
面试题 03.05. 栈排序
面试题 03.05. 栈排序栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。示例1: 输入:["SortedStack", "push", "push", "peek", "pop", "peek"][[], [1], [2], [], [], []] 输出:[null,null,null,1,n原创 2021-05-18 19:14:07 · 67 阅读 · 0 评论 -
面试题 10.02. 变位词组
面试题 10.02. 变位词组编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。注意:本题相对原题稍作修改示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。方法1:Hash public List<原创 2021-05-18 08:39:59 · 157 阅读 · 0 评论 -
面试题 16.24. 数对和
面试题 16.24. 数对和方法1:Hashpublic List<List<Integer>> pairSums(int[] nums, int target) { List<List<Integer>> res = new ArrayList<>(); HashMap<Integer, Integer> map = new HashMap<>(); for (int x : nums) map原创 2021-05-17 23:02:45 · 80 阅读 · 0 评论 -
面试题 17.11. 单词距离
面试题 17.11. 单词距离有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?示例:输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"输出:1提示:words.length <= 100000方原创 2021-05-15 19:33:11 · 145 阅读 · 0 评论 -
面试题 08.07. 无重复字符串的排列组合
面试题 08.07. 无重复字符串的排列组合无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。示例1: 输入:S = "qwe" 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]示例2: 输入:S = "ab" 输出:["ab", "ba"]提示:字符都是英文字母。字符串长度在[1, 9]之间。方法1:回溯 List<String> list = new ArrayL原创 2021-05-13 10:04:16 · 124 阅读 · 0 评论