![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 71
happy_XYY
机器学习 C++ Java 算法
展开
-
剑指offer-数据结构:数组和指针(基础知识)
数据结构一直是技术面试的重点,大多数面试题都是围绕着数组、字符串、链表、树、栈以及队列这几种常见的数据结构展开的。数组和字符串是两种最基本的数据结构,用连续内存分别存储数字和字符。在C/C++中,数组和指针是相互关联又有区别的两个概念。当我们声明一个数组时,其数组的名字也是一个指针,该指针指向数组的第一个元素。我们可以用一个指针来访问数组。值得注意的是,C/C++没有记录数组的大小,因此用指针访问数原创 2016-06-24 20:25:57 · 778 阅读 · 0 评论 -
数据结构与算法:链表
数组和链表的区别是什么找出单链表中的倒数第k个元素数组和链表的区别是什么数组与链表是两种不同的数据存储方式。链表的特性是在中间任意位置添加元素、删除元素都非常地快,不需要移动其他的元素。通常对于单链表而言,链表中每一个元素都要保存一个指向下一个元素的指针;而对于双链表,每个元素既要保存一个指向下一个元素的指针,还要保存一个指向上一个元素的指针;循环链表则在最后一个元素中保存一个指向原创 2016-06-13 17:34:13 · 1167 阅读 · 0 评论 -
数据结构与算法:字符串
将字符串逆序普通逆序原地逆序不允许临时变量的原地逆序按单词逆序如何实现逆序打印找出一个字符串中第一个只出现一次的字符将字符串逆序给定一个字符串s,将s中的字符顺序颠倒过来,如 s=’abcd’,逆序后变成 s=’dcba’。可以采用多种方法对字符串进行逆序,一下将对其中的一些方法进行分析普通逆序直接分配一个与原字符串等长的字符数组,然后反向拷贝即可原地原创 2016-06-13 20:55:20 · 1426 阅读 · 0 评论 -
剑指offer-4-面试25:二叉树中和为某一值的路径
题目 分析 测试用例代码 本题考点 题目 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的结点形成一条路径。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRigh原创 2016-07-11 17:39:18 · 606 阅读 · 0 评论 -
剑指offer-4-面试26:复杂链表的复制
题目 分析 测试用例代码 本题考点 题目 请实现函数 ComplexListNode* Clone( ComplexListNode* pHead ),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个 m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如下。struct ComplexListNode{ int原创 2016-07-12 12:44:51 · 786 阅读 · 0 评论 -
剑指offer-4-解决面试题的思路
面试官谈面试思路画图让抽象问题形象化举例让抽象问题具体化分解让复杂问题简单化面试官谈面试思路编码前讲自己的思路是一个考察指标。合格的应聘者需要在做事之前明白自己要做的事情究竟是什么,以及该怎么做。一开始就编码的人员,除非后面表现非常优秀,否则很容易通不过。可以采用举例子、画图等多种方式,解释清楚问题本身和问题解决方案是关键。画图让抽象问题形象化画图是在面试过程中应聘者用来帮助自己分析、推理的原创 2016-07-12 19:38:00 · 1897 阅读 · 0 评论 -
数据结构与算法:STL容器
STL(Standard Template Library)是一个C++领域中,用模板技术实现的数据结构和算法库,其中的vector、list、stack、queue等结构不仅拥有更强大的功能,还有了更高的安全性。它体现了泛型编程的思想,具有高度的可重用行、高性能、高移植性原创 2016-06-15 17:15:12 · 988 阅读 · 0 评论 -
数据结构与算法:排序
排序问题一直是计算机技术研究的重要问题,排序算法的好坏直接影响程序的执行速度和辅助存储空间的占有量,所以各大IT企业在笔试面试中也经常出现有关排序的题目。本节详细分析常见的各种排序算法,并从时间复杂度、空间复杂度、适用情况等多个方面对它们进行综合比较。原创 2016-06-16 22:00:14 · 2539 阅读 · 4 评论 -
剑指offer-5-面试31:连续子数组的最大和(时间效率)
题目 分析 测试用例代码 本题考点 题目 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)例如,输入的数组为 {1,-2, 3, 10,-4,7,2,-5 },和最大的子数组为 {3,10,-4,7,2 },因此输出为该子数组的和 18. 分析 看到 测试用例&代码 本原创 2016-07-14 15:57:14 · 761 阅读 · 0 评论 -
剑指offer-面试10:二进制中1的个数(位运算)
位运算是把数字用二进制表示之后,对每一位上0或者1的运算。二进制及其位运算是现代计算机学科的基石,很多底层的技术都离不开位运算。位运算的五种运算: 与、或、异或、左移和右移 运算 0、0 1、0 0、1 1、1 与(&) 0 0 0 1 或() 0 1 1 1 异或(^) 0 1 1 0原创 2016-06-28 22:07:50 · 880 阅读 · 0 评论 -
剑指offer-面试9:斐波那契数列(递归和循环)
如果需要重复地多次计算相同的问题,通常可以选择用递归或者循环两种不同的方法。递归是在一个函数的内部调用这个函数自身。而循环则是通过设置计算的初始值及终止条件,在一个范围内重复运算。 通常递归的代码会比较简洁。在上面的例子里,递归的代码只有一个语句,而循环则需要4个语句。在树的前序、中序、后序遍历算法的代码中,递归的实现明显要比循环简单得多。在面试的时候,如果面试官没有特别的要求,应聘者可以尽量多采原创 2016-06-28 16:18:36 · 1082 阅读 · 0 评论 -
剑指offer-算法和数据结构:查找和排序
和数据结构一样,算法的面试题也备受面试官的青睐,其中排序和查找是面试是考察算法的重点。 在准备面试的时候应该重点掌握二分查找、归并排序和快速排序,做到能随时正确、完整地写出它们的代码。查找和排序都是在程序设计中常用到的算法。查找相对而言较为简单,不外乎顺序查找、二分查找、哈希表查找和二叉排序树查找。在面试的时候,不管用循环还是用递归,面试官都期待应聘者能够写出完整正确的二分查找代码。。。原创 2016-06-28 09:31:22 · 994 阅读 · 0 评论 -
数据结构与算法:数组(二)
数据结构与算法是计算机发展的基石,现代计算机的起源是数学,数学的核心是算法,计算机历史上每一次大的变革都离不开算法的推动。纵然“条条大路通罗马”,但好的算法永远比提高硬件设备管用。如何判断一个数组中原创 2016-06-12 20:29:30 · 3475 阅读 · 0 评论 -
剑指offer-面试8:旋转数组的最小数字(查找和排序)
题目 分析 基本解法特例1特例2 测试用例代码 本题考点 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 { 3,4,5,1,2 } 为 { 1,2,3,4,5 }的一个旋转,该数组的最小值为1. 分析 最直观的解法,从头到尾遍历数组一次,就能找出最小的元素。这种思路的时间复杂度是O(n)。原创 2016-06-28 11:29:23 · 846 阅读 · 0 评论 -
剑指offer-面试7:用两个栈实现队列(栈和队列)
题目分析测试用例代码本题考点相关题目题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入节点和在队列头部删除结点的功能。。template <typename T> class CQueue{ public: CQueue( void ); ~CQueue( void )原创 2016-06-25 17:04:31 · 534 阅读 · 0 评论 -
剑指offer-面试6:重建二叉树(二叉树前中后序遍历)
题目分析题目输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如 输入前序遍历序列{ 1,2,4,7,3,5,6,8 } 和 中序遍历序列 { 4,7,2,1,5,3,8,6 },则重建出二叉树,并输出它的头结点。分析在二叉树的前序遍历序列中,第一个数字总是树的根结点的值。但在中序遍历序列中,根结点的值在序列的中间原创 2016-06-25 16:17:31 · 745 阅读 · 0 评论 -
剑指offer-面试4:替换空格(字符串操作)
题目分析时间复杂度为On2的解法时间复杂度为On的解法测试用例代码本题考点相关题目题目实现一个函数,把字符串中的每个空格替换成”%20”。例如,输入 “we are happy.”,则输出“we%20are%20happy.”。在网络编程中,如果URL中含有特殊字符,如空格,“#”等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换规则是在‘%原创 2016-06-24 21:48:04 · 547 阅读 · 0 评论 -
剑指offer-面试3:二维数组中的查找(数组和指针)
题目解题思想测试用例代码本题考点题目在一个二维数组中,每一行都是按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思想选取数组中右上角的数字。 (1)如果该数字等于要查找的数字,查找过程结束; (2)如果该数字大于要查找的数字,剔除这个数字所在的列; (3)如果该数字小于要查找的数字,剔除这个原创 2016-06-24 20:50:45 · 588 阅读 · 0 评论 -
剑指offer-面试1:赋值运算符函数(C++ operator重构)
在面试的时候有种题型是要求写代码定义一个类型或者实现类型中的成员函数 。题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数。原创 2016-06-24 18:35:31 · 1885 阅读 · 0 评论 -
剑指offer-5-面试32:从 1 到 n 整数中 1 出现的次数(时间效率)
题目 分析 不考虑时间效率的解法靠它想拿offer有点 难从数字规律着手明显提高时间效率的解法能让面试官耳目一新 测试用例代码 本题考点 题目 从 1 到 n 整数中 1 出现的次数。题目 :输入一个整数 n ,求从 1 到 n 这n 个整数的十进制表示中1 出现的次数。 例如 输入 12,从 1 到 12 这些整数中包含 1 的数字 有 1, 10 ,11 和 12, 1 一共出现了原创 2016-07-14 17:32:18 · 666 阅读 · 0 评论 -
剑指offer-5-面试33:把数组排成最小的数(时间效率)
题目 分析 测试用例代码 本题考点 题目 输入一个正整数数组,把数组里所有数字拼接起来拍成一个树,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这 3 个数字能排成的最小数字 321323. 分析 最直接的做法是先求出这个数组中所有数字的全排列,然后把每个排列拼起来,最后求出拼起来的数字的最小值。其实,此题可以找到一个排序规则,数组根据这个规则排序之后能排原创 2016-07-14 20:58:09 · 744 阅读 · 0 评论 -
剑指offer-5-面试34:丑数(优化时间和空间效率)
题目 分析 逐个判断每个整数是不是丑数的解法直观但不够高效创建数组保存已经找到的丑数用空间换时间的解法 测试用例代码 本题考点 题目 我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如 6、8都是丑数,但14不是,因为它包含因子7.习惯上我们把 1 当做第一个丑数。 分析 逐个判断每个整数是不是丑数的解法,直观但不够高效所谓一个原创 2016-07-15 10:35:12 · 998 阅读 · 0 评论 -
剑指offer-3-面试题11:数值的整数次方(对错误的处理)
题目 分析 自以为题目简单的解法全面但不够高效的解法全面又高效的解法 测试用例代码 本题考点 题目 实现函数 double Power( double base, int exponent ),求base 的 exponent 次方。不得使用库函数,同时不需要考虑大数问题。本题要求实现类似于pow的功能。要求实现特定库函数(特别是处理数值和字符串的函数)的功能,是一类常见的面试题。原创 2016-06-29 22:01:30 · 1245 阅读 · 0 评论 -
剑指offer-3-面试12:打印1到最大的n位数
题目 分析 跳进面试官陷阱没有考虑大数问题在字符串上模拟数字加法的解法 测试用例代码 本题考点 题目 输入数字n,按顺序打印出从1到最大的n位十进制数。比如,输入3,则打印出1、2、3一直到最大的3位数,即 999。 分析 跳进面试官陷阱,没有考虑大数问题题目看起来很简单。看到这个问题之后,最哦容易想到的办法是先求出最大的n位数,然后用一个循环从1开始原创 2016-07-01 20:51:08 · 1253 阅读 · 0 评论 -
剑指offer-4-面试19:二叉树的镜像
题目 分析 测试用例代码 本题考点 题目 完成一个函数,输入一个二叉树,该函数输出它的镜像二叉树结点的定义如下:struct BinaryTreeNode{ int m_nvalue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}; 分析 树的镜像对很多人来说会是一个新的概念,未必一下子能够想出求树的镜原创 2016-07-07 10:29:46 · 537 阅读 · 0 评论 -
海量数据处理:经典实例分析
有关海量数据处理的问题,主要有以下3类:top K问题、重复问题、排序问题原创 2016-06-21 16:06:31 · 6503 阅读 · 1 评论 -
剑指offer-4-面试题20:顺时针打印矩阵(画图使抽象问题形象化)
题目 分析 测试用例代码 本题考点 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16则依次打印出数字 1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10 分析 这道题完全没有涉及复杂的数据结构原创 2016-07-07 15:11:41 · 795 阅读 · 0 评论 -
剑指offer-4-面试21:包含min函数的栈
题目 分析 测试用例代码 本题考点 题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及 pop的时间复杂度都是O(1) 分析 看到这个问题,我们第一反应可能时每次压入一个新元素进栈时,将栈里的所有元素排序,让最小的元素位于栈顶,这样就能在O(1)时间得到最小元素了。但这种思路不能保证最后压入栈的元素能够最先出栈,因此这个数据结构原创 2016-07-07 17:17:21 · 640 阅读 · 0 评论 -
剑指offer-4-面试题22:栈的压入、弹出序列
题目 分析 测试用例代码 本题考点 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5 是某栈的压栈序列,序列 4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。 分析 解决这个问题很直观的想法就是建立一个辅助栈,把输入的第一个序列中的数字依原创 2016-07-07 22:09:40 · 779 阅读 · 0 评论 -
剑指offer-4-面试23:从上往下打印二叉树
题目 分析 本题考点 本题扩展 举一反三 题目 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如,输入图4.5中的二叉树,则依次打印出8、6、10、5、7、9、11 二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeN原创 2016-07-08 13:25:38 · 862 阅读 · 0 评论 -
剑指offer-3-面试14:调整数组顺序使奇数位于偶数前面
题目 分析 只完成基本功能的解法仅适用于初级程序员考虑可扩展性的解法能秒杀offer 测试用例代码 本题考点 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 分析 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组原创 2016-07-04 17:33:04 · 609 阅读 · 0 评论 -
剑指offer-3-面试13:在O(1)时间删除链表结点
题目 分析 测试用例代码 本题考点 题目 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};void DeleteNode( ListNode** pListHead, ListNode*原创 2016-07-03 10:49:58 · 2030 阅读 · 0 评论 -
剑指offer-3-面试16:反转链表
题目 分析 测试用例代码 本题考点 本题扩展 题目 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表的定义如下:struct ListNode{ int m_nkey; ListNode* m_pNext;}; 分析 不难注意到,由于结点 i 的m_pNext指向了它的前一个结点,导致我们无法在链表中遍历到结点 j 。为了避免链表在结点i原创 2016-07-06 19:50:28 · 649 阅读 · 0 评论 -
数据结构与算法:二叉树
二叉树是一种非常常见并且实用的数据结构,它结合了有序数组与链表的优点。在二叉树中查找数据与在数组中查找数据一样快,在二叉树中添加、删除数据的速度也和在链表中一样高效,所以有关二叉树的相关技术一直是程序员面试笔试中必考的知识点。原创 2016-06-18 10:57:38 · 4546 阅读 · 0 评论 -
剑指offer-5-面试35:第一个只出现一次的字符
题目 分析 测试用例代码 本题考点 本题扩展相关题目 题目 在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’ 分析 最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)原创 2016-07-15 13:25:24 · 751 阅读 · 0 评论 -
剑指offer-5-面试36:数组中的逆序对(时间效率和空间效率的平衡)
题目 分析 测试用例代码 本题考点 题目 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 分析 看到这个题目,我们第一反应是顺序扫描整个数组。每扫描到一个数字的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组成了一个逆序对。假设数组中含有 n 个数字。由于每个数字都要和O(n)个数原创 2016-07-15 15:39:37 · 819 阅读 · 0 评论 -
数据结构与算法:图
图论是计算机研究的一个重要分支,有关图论的内容可以写很多,但正是因为图论的这种复杂性,在程序员面试笔试中,有关图论的问题并不多见,考察的也并不深奥。本节内容涉及一些经常出现的图论问题,并给予详细的解答。原创 2016-06-19 11:30:30 · 1657 阅读 · 0 评论 -
剑指offer-6-面试43:n 个骰子的点数()
题目 分析 测试用例代码 本题考点 题目 分析 测试用例&代码 本题考点原创 2016-07-17 14:44:02 · 748 阅读 · 0 评论 -
海量数据处理:算法
海量信息即大规模数据,随着互联网技术的发展,互联网上的信息越来越多,如何从海量信息中提取有用信息成为当前互联网技术发展必须面对的问题。在海量数据中提取信息,不同于常规量级数据中提取信息,在海量信息中提取有用数据,会存在以下几个方面的问题:(1)数据量过大,数据中什么情况都可能存在,如果信息数量只有20条,人工可以逐条进行查找、比对,可是当数据规模扩展到上百条、数千条、数亿条,甚至更多时,仅仅只通过手工已经无法解原创 2016-06-20 21:54:08 · 9789 阅读 · 0 评论 -
剑指offer-3-面试15:链表中倒数第k个结点
题目 分析 测试用例代码 本题考点 相关题目举一反三 题目 输入一个链表,输出该链表中第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如,一个链表有6个结点,从头结点开始它们的值依次是 1、2、3、4、5、6 。这个链表的倒数第3个结点是值为4的结点。 链表结点定义如下:struct ListNode{ int m_nValue;原创 2016-07-06 19:17:41 · 568 阅读 · 0 评论