随笔分类 -  《程序员面试金典(第6版)》

摘要:题目: 设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" "代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" ")中。第一个玩家总是放字符"O",且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中, 阅读全文
posted @ 2020-03-14 13:37 silentteller 阅读(943) 评论(0) 推荐(0)
摘要:题目: 设计一个方法,找出任意指定单词在一本书中的出现频率。 你的实现应该支持如下操作: WordsFrequency(book)构造函数,参数为字符串数组构成的一本书get(word)查询指定单词在数中出现的频率示例: WordsFrequency wordsFrequency = new Wor 阅读全文
posted @ 2020-03-14 12:55 silentteller 阅读(298) 评论(0) 推荐(0)
摘要:题目: 编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。 示例: 输入: numbers = [1,2]输出: [2,1]提示: numbers.length == 2 分析: 使用异或,或者是加减法均可。 程序: class Solution { public i 阅读全文
posted @ 2020-03-14 12:48 silentteller 阅读(268) 评论(0) 推荐(0)
摘要:题目: 在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。 示例: 输入: [5, 3, 1, 2, 3] 阅读全文
posted @ 2020-03-14 12:43 silentteller 阅读(258) 评论(0) 推荐(0)
摘要:题目: 假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调用该方法; 实现 getRankOfNumber(int x) 方法,返回小于或等于 x 阅读全文
posted @ 2020-03-13 18:26 silentteller 阅读(373) 评论(0) 推荐(0)
摘要:题目: 给定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 阅读全文
posted @ 2020-03-13 17:37 silentteller 阅读(172) 评论(0) 推荐(0)
摘要:题目: 稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。 示例1: 输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta" 输出:-1 阅读全文
posted @ 2020-03-13 17:04 silentteller 阅读(280) 评论(0) 推荐(0)
摘要:题目: 搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。 示例1: 输入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 阅读全文
posted @ 2020-03-13 16:30 silentteller 阅读(346) 评论(0) 推荐(0)
摘要:题目: 编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。 注意:本题相对原题稍作修改 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["na 阅读全文
posted @ 2020-03-12 17:40 silentteller 阅读(263) 评论(0) 推荐(0)
摘要:题目: 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 初始化 A 和 B 的元素数量分别为 m 和 n。 示例: 输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3 输出: [1,2, 阅读全文
posted @ 2020-03-12 17:27 silentteller 阅读(171) 评论(0) 推荐(0)
摘要:题目: 给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。 示例 1: 输入: s = "1^0|0|1", r 阅读全文
posted @ 2020-03-12 17:13 silentteller 阅读(544) 评论(0) 推荐(0)
摘要:题目: 堆箱子。给你一堆n个箱子,箱子宽 wi、高hi、深di。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组[wi, di, hi]表示每个箱子。 示例1: 输入:box = [[1, 1 阅读全文
posted @ 2020-03-12 15:06 silentteller 阅读(506) 评论(0) 推荐(0)
摘要:题目: 设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。 注意:本题相对原题做了扩展 示例: 输入:4 输出:[[".Q..","...Q","Q...","..Q."] 阅读全文
posted @ 2020-03-12 14:22 silentteller 阅读(301) 评论(0) 推荐(0)
摘要:题目: 硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007) 示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2: 输入: n = 10 输出:4 阅读全文
posted @ 2020-03-11 15:03 silentteller 阅读(319) 评论(0) 推荐(0)
摘要:题目: 颜色填充。编写函数,实现许多图片编辑软件都支持的“颜色填充”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,直到原来的颜色值全都改变。 示例1: 输入:image = [[1,1,1],[1,1,0],[1,0,1]] sr = 1 阅读全文
posted @ 2020-03-11 14:12 silentteller 阅读(263) 评论(0) 推荐(0)
摘要:题目: 括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。 说明:解集不能包含重复的子集。 例如,给出 n = 3,生成结果为: [ "((()))", "(()())", "(())()", "()(())", "()()()"] 分析: dfs搜索,如果当前左括号用超了,右 阅读全文
posted @ 2020-03-11 13:59 silentteller 阅读(316) 评论(0) 推荐(0)
摘要:题目: 有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。 示例1: 输入:S = "qqe" 输出:["eqq","qeq","qqe"]示例2: 输入:S = "ab" 输出:["ab", "ba"]提示: 字符都是英文字母。字符串长度在[1, 9]之间。 分析: 这道题所给的字 阅读全文
posted @ 2020-03-11 13:35 silentteller 阅读(619) 评论(0) 推荐(0)
摘要:题目: 无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。 示例1: 输入:S = "qwe" 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]示例2: 输入:S = "ab" 输出:["ab", "ba"]提示: 字 阅读全文
posted @ 2020-03-11 12:53 silentteller 阅读(860) 评论(0) 推荐(0)
摘要:题目: 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子 阅读全文
posted @ 2020-03-10 16:41 silentteller 阅读(209) 评论(0) 推荐(0)
摘要:题目: 递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。 示例1: 输入:A = 1, B = 10 输出:10示例2: 输入:A = 3, B = 4 输出:12 分析: 我们将A看做被乘数,如果A为偶数的话则multiply(A , 阅读全文
posted @ 2020-03-10 15:00 silentteller 阅读(248) 评论(0) 推荐(0)