![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序员面试金典第六版习题
qqssss121dfd
practice,practice,practice,excellent .
展开
-
12.10 分配内存
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 如果要保证分配的内存块的起始地址能够被参数alignmentalignmentalignment整除,算法的思想是多分配alignment−1个alignment-1个alignment−1个字节,然后以分配的内存块的首地址p1p1p1为基础后移几个字节,使得原创 2020-05-16 17:02:45 · 186 阅读 · 0 评论 -
12.9 智能指针
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里相当于是自己实现一个智能指针。智能指针主要用于方便动态内存的管理,如果自己手动使用newnewnew和deletedeletedelete或mallocmallocmalloc和freefreefree来管理动态内存的话比较困难,因为很难知道具体在哪个地方原创 2020-05-16 14:22:50 · 126 阅读 · 0 评论 -
12.8 复制节点
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里我们假设Node结构为二叉树的一个节点,算法的工作就是完全复制一个与原二叉树一样的二叉树。这里完全就是一颗二叉树的中序遍历,访问根节点然后构造和根节点一样的根节点并将原根节点和新建立的根节点映射起来,然后再对原数据结构的左右子树进行递归调用。一个简单的例子原创 2020-05-15 18:41:02 · 215 阅读 · 0 评论 -
12.2 翻转字符串
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法比较简单。分别从字符的第个字符和最后一个真真的字符(不是结尾字符)开始向中间进行字符的交换直到左边的字符索引大于等于右边的字符索引。只需要c字符串以字符′\0′'\backslash0'′\0′结尾即可。void reverse(char * str)原创 2020-05-15 14:09:54 · 129 阅读 · 0 评论 -
12.1 最后K行
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法只读取一次文件。算法首先建立一个有k个元素的string数组,然后读取文件的每一行然后放入数组中对应的元素,第一行放入index=0index=0index=0的数组元素,…,第k行放入index=k−1index=k-1index=k−1的数组元素,…,原创 2020-05-15 13:42:26 · 116 阅读 · 0 评论 -
10.11 峰与谷
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 题//次优解void swap(vector<int> &myArray,int left,int right){ int temp = myArray[left]; myArray[left]= myArray[right];原创 2020-05-13 15:54:22 · 250 阅读 · 0 评论 -
10.10 数字流的秩
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 以下算法在不断读取数字流时不断进行voidtrack(intnumber,RankNode∗root)void track(int number, RankNode *root)voidtrack(intnumber,RankNode∗root)操作来对已经读原创 2020-05-12 19:42:33 · 288 阅读 · 0 评论 -
10.9 排序矩阵查找
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 基础算法利用到了排序矩阵的特殊性质,如果待查找元素小于一列开头的元素则待查找元素肯定不会位于该列右边的列以及该列本身。如果待查找元素小于一行末尾的元素则待查找元素肯定不会位于该行上边的行以及该行本身。基础算法从矩阵第0行最后一个元素开始搜索,不断向左下角行进来原创 2020-05-11 09:35:32 · 591 阅读 · 0 评论 -
10.8 寻找重复数
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里也是利用了10.7节的思想,这里就不多说了。class bitSet{private: int* bitset;public: bitSet(int size) { bitset = new int[(size >> 5)+1原创 2020-05-10 18:25:58 · 101 阅读 · 0 评论 -
10.7 失踪的整数
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里考虑的是32bit的有符号数,其中非负整数的个数为231=2∗2302^{31}=2*2^{30}231=2∗230个.,大约为20亿个。如果一个文件包含40亿个32bit的有符号非负整数,则该文件中肯定有重复的数。1GB的内存有8∗2308*2^{30}原创 2020-05-10 17:19:17 · 197 阅读 · 0 评论 -
10.5 稀疏数组搜索
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里讲的也是二分搜索,没什么特别的只是在中值处遇到空字符串时需要将索引移位后再进行比较。//迭代法int search(vector<string> strings, string str, int first, int last) {原创 2020-05-09 16:07:47 · 170 阅读 · 0 评论 -
10.4 排序集合的查找
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里的关键点是数据结构已经有序,但是不知道元素的个数。所以直接利用二分搜索会有些困难。但是这里已知当获取数据结构中的元素时,如果索引超过范围则会返回-1,这里的算法首先从索引1开始不断加倍索引来确定需要寻找的元素的大概范围,然后再利用二分搜索找到其准确位置。原创 2020-05-09 13:31:48 · 116 阅读 · 0 评论 -
10.3 搜索旋转数组
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 数组的旋转类似于二进制操作的循环右移或循环左移,左移或右移出的数又再次加入到数组的右边或左边。数组{1,2,3,4}\{1,2,3,4\}{1,2,...原创 2020-05-07 20:12:13 · 371 阅读 · 0 评论 -
10.2 对变位词进行分组
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 变位词(Anagrams)是指几个不同的单词,它们每个单词中字符的个数相同,当将每个单词其中每个字符按照ASCII码值升序排列之后,它们变成相同的字...原创 2020-05-07 11:04:29 · 258 阅读 · 0 评论 -
10.1 合并排序的数组
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 问题比较简单就不多说了,书中解释比较详细。void merge(vector<int> arrayA, vector<int&g...原创 2020-05-06 16:06:50 · 93 阅读 · 0 评论 -
8.14布尔运算
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法一根据逻辑运算式中的逻辑运算符将逻辑运算式分为左右两部分,然后分别求得左右两个部分分别为真和假时得括号组合的数,然后根据逻辑运算符的类型以及参数...原创 2020-05-06 15:29:10 · 314 阅读 · 0 评论 -
8.13 堆箱子
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 假设一共有box1,box2,...,boxnbox_1, box_2, ..., box_nbox1,box2,...,boxnn个箱子。首...原创 2020-05-04 10:41:38 · 389 阅读 · 0 评论 -
8.12 八皇后
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 八皇后问题的关键点是所有的皇后不能在同一行,同一列且不能在同一对角线上。如图1所示的8×88×88×8表格中红色的方格,假设其为一个皇后的所在地,绿...原创 2020-05-03 15:20:05 · 166 阅读 · 0 评论 -
8.11 硬币
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 总共n分硬币值的硬币是由不同数目的各种面值的硬币组合构成的。算法一从最大面值的硬币开始先穷尽其可能的构成n分硬币值时的该面值硬币的个数,然后从n减去...原创 2020-05-03 12:10:02 · 142 阅读 · 0 评论 -
8.10 颜色填充
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 题目的意思是对于像我们常用的微软的OFFICE软件的PPT有颜色填充的功能。如图1所示,当我们插入一个形状后,我们可以通过格式菜单里的黑色方框处的不...原创 2020-05-02 20:42:45 · 431 阅读 · 0 评论 -
8.9 括号
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法一利用递归思想在得到由n−1n-1n−1个括号对组成的所有合法的组合后,对于其每一个合法组合在其前面,第一个左括号后,第二个左括号后,…,第n−...原创 2020-05-02 19:11:30 · 237 阅读 · 0 评论 -
8.8有重复字符的字符串的排列
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里采用了8.7 无重复字符串的排列组合中算法三的思想,只不过因为这里的字符串中有重复的字符。所以算法先统计字符串中所有的字符以及其对应的出现的次数...原创 2020-04-30 15:51:23 · 193 阅读 · 0 评论 -
8.7 无重复字符串的排列组合
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法一的基本思想是要想获得n个不同字符c1,c2,....,cn{c_1,\quad c_2, \quad....,c_n}c1,c2,.......原创 2020-04-30 11:02:29 · 459 阅读 · 0 评论 -
8.6 汉诺塔问题
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法的基本思想是:要将n个顺序堆叠的碟子从column1column_1column1借助column2column_2column2整体保持原...原创 2020-04-29 10:01:58 · 148 阅读 · 0 评论 -
8.5 递归乘法
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法的基本思想是两个正整数n1n_1n1和n2n_2n2相乘等于n1n_1n1个n2n_2n2相加(n1<n2n_1<n_2n1...原创 2020-04-27 20:07:31 · 1037 阅读 · 0 评论 -
8.4幂集
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 一个有n个元素的集合一共有Cn0+Cn1+Cn2+...Cnn=2nC_n^0+C_n^1+C_n^2+...C_n^n=2^nCn0+Cn1+...原创 2020-04-27 16:37:55 · 179 阅读 · 0 评论 -
8.3 魔术索引
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 普通算法利用数组有序以及二分查找的思想。当中间值array[mid]array[mid]array[mid]小于中间值索引midmidmid时中间值...原创 2020-04-26 19:13:44 · 148 阅读 · 0 评论 -
8.2 迷路的机器人
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 题中隐含的假设是只有一条从左上角到右下角的路径,否则添加的节点中将包含所有路径的节点。递归算法从终结点开始从其左节点和上节点出发检查是否有一条从开始...原创 2020-04-26 16:57:24 · 309 阅读 · 0 评论 -
8.1 三步问题
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 递归法的基本思想是要计算到达第n阶台阶的路径数只要知道到达第n阶台阶的路径中的前一步的路径数即可,前一步有三种可能:第n-1阶往上迈一步,第n-2阶...原创 2020-04-26 09:57:05 · 295 阅读 · 0 评论 -
6.10 有毒的苏打水
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 28天算法的思想是将苏打水先均匀分配到每一张测试试纸上,然后7天后查看那一张试纸变色就可以确定有毒的苏打水在那一组,丢弃变色的哪一张测试纸,然后重复...原创 2020-04-24 16:21:01 · 174 阅读 · 0 评论 -
5.8 绘制直线
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里没有什么特别的,算法先找到需要设置区域的完整字节,然后可以一次性设置8个比特位(这样减少了一个一个比特位操作的任务量),最后设置头尾的不完整的一...原创 2020-04-16 20:02:20 · 132 阅读 · 0 评论 -
5.4 下一个数
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 蛮力法先统计输入整数二进制表示中二进制值1位的个数,然后分别迭代将该整数加一或减一,找到的第一个大于或小于该整数且与其二进制表示中二进制值1位的个数...原创 2020-04-14 20:08:37 · 109 阅读 · 0 评论 -
5.3 翻转数位
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里提供两种方法。蛮力法对于一个输入整数的二进制表示,从低位到高位统计连续的1或0位的个数并按顺序将它们组成一个数组。统计从0二进制位开始,如果输入...原创 2020-04-12 21:27:11 · 403 阅读 · 0 评论 -
5.2 二进制数转字符串
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里提供两种方法。第一种方法利用的是十进制小数转二进制小数的乘2取整法。对于值为1的二进制小数位,第一位的值为2−1=0.52^{-1}=0.52−...原创 2020-04-12 16:57:07 · 2927 阅读 · 0 评论 -
5.1插入
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 这里的问题比较简单,就不做多的说明了。推导过程如图1所示。测试结果如图2所示。 图1.int updateBits(int n,int m,...原创 2020-04-12 16:34:53 · 542 阅读 · 0 评论 -
4.12 求和路径
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 以下蛮力法利用递归统计从二叉树中每一个节点开始的满足题设要求的路径数,然后求其和即为所求。当二叉树平衡的时候,计算从根节点(第一层)开始的满足题设要...原创 2020-04-07 20:28:25 · 237 阅读 · 0 评论 -
4.11 随机节点
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 题目的主要要求是设计一个二叉树类的一个可以返回一个随机节点的方法且该方法返回任意一个节点的概率相同。算法的主要思想是在每一个节点中添加一个sizes...原创 2020-04-06 16:18:00 · 369 阅读 · 0 评论 -
4.10 检查子树
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法一的主要思想是如果在遍历一颗二叉树时遇到空节点则在遍历序列中加入值"X",则两颗二叉树的结构相同以及每一个节点的值也相同和这两个二叉树的先序遍历...原创 2020-04-05 17:55:02 · 216 阅读 · 0 评论 -
4.9 二叉搜索树序列
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 题意为给定一颗二叉搜索树,找到一个数组集合,集合中的每一个数组都是由二叉搜索树中的所有节点的值组成,通过不断的将数组中的元素按照元素在数组中的顺序插...原创 2020-04-04 20:16:46 · 205 阅读 · 0 评论 -
4.8 首个共同祖先
《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。 算法递归访问当前节点的左右子树中的节点,当子树中含有节点p时返回节点p(此时子树中没有节点q),当子树中含有节点q时返回节点q(此时子树中没有节点p...原创 2020-03-25 16:36:00 · 230 阅读 · 0 评论