【剑指Offer学习】【所有面试题汇总】

剑指Offer学习



  剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流!


所有代码下载【https://github.com/Wang-Jun-Chao/coding-interviews】


目录


第01-10题


【剑指Offer学习】【面试题02:实现Singleton 模式——七种实现方式】

【剑指Offer学习】【面试题03:二维数组中的查找】

【剑指Offer学习】【面试题04:替换空格】

【剑指Offer学习】【面试题05:从尾到头打印链表】

【剑指Offer学习】【面试题06:重建二叉树】

【剑指Offer学习】【面试题07:用两个栈实现队列】

【剑指Offer学习】【面试题08:旋转数组的最小数字】

【剑指Offer学习】【面试题09:斐波那契数列】

【剑指Offer学习】【面试题10:二进制中1 的个数】

第11-20题


【剑指Offer学习】【面试题11:数值的整数次方】

【剑指Offer学习】【面试题12:打印1 到最大的n 位数】

【剑指Offer学习】【面试题13:在O(1)时间删除链表结点】

【剑指Offer学习】【面试题14:调整数组顺序使奇数位于偶数前面】

【剑指Offer学习】【面试题15:链表中倒数第k个结点】

【剑指Offer学习】【面试题16:反转链表】

【剑指Offer学习】【面试题17:合并两个排序的链表】

【剑指Offer学习】【面试题18:树的子结构】

【剑指Offer学习】【面试题19:二叉树的镜像】

【剑指Offer学习】【面试题20:顺时针打印矩阵】

第21-30题


【剑指Offer学习】【面试题21:包含min函数的钱】

【剑指Offer学习】【面试题22:栈的压入、弹出序列】

【剑指Offer学习】【面试题23:从上往下打印二叉树】

【剑指Offer学习】【面试题24:二叉搜索树的后序遍历序列】

【剑指Offer学习】【面试题25:二叉树中和为某一值的路径】

【剑指Offer学习】【面试题26:复杂链表的复制】

【剑指Offer学习】【面试题27:二叉搜索树与双向链表】

【剑指Offer学习】【面试题28:字符串的排列】

【剑指Offer学习】【面试题29:数组中出现次数超过一半的数字】

【剑指Offer学习】【面试题30:最小的k个数】

第31-40题


【剑指Offer学习】【面试题31:连续子数组的最大和】

【剑指Offer学习】【面试题32:求从1到n的整数中1出现的次数】

【剑指Offer学习】【面试题33:把数组排成最小的数】

【剑指Offer学习】【面试题34:丑数】

【剑指Offer学习】【面试题35:第一个只出现一次的字符】

【剑指Offer学习】【面试题36:数组中的逆序对】

【剑指Offer学习】【面试题37:两个链表的第一个公共结点】

【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】

【剑指Offer学习】【面试题39:二叉树的深度】

【剑指Offer学习】【面试题40:数组中只出现一次的数字】

第41-50题


【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】

【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】

【剑指Offer学习】【面试题43 : n 个锻子的点数】

【剑指Offer学习】【面试题44:扑克牌的顺子】

【剑指Offer学习】【面试题45:圆圈中最后剩下的数字(约瑟夫环问题)】

【剑指Offer学习】【面试题47:不用加减乘除做加法】

【剑指Offer学习】【面试题49:把字符串转换成整数】

【剑指Offer学习】【面试题50:树中两个结点的最低公共祖先】

第51-60题


【剑指Offer学习】【面试题51:数组中重复的数字】

【剑指Offer学习】【面试题52:构建乘积数组】

【剑指Offer学习】【面试题53:正则表达式匹配】

【剑指Offer学习】【面试题54:表示数值的字符串】

【剑指Offer学习】【面试题55:字符流中第一个不重复的字符】

【剑指Offer学习】【面试题56:链表中环的入口结点】

【剑指Offer学习】【面试题57:删除链表中重复的结点】

【剑指Offer学习】【面试题58:二叉树的下一个结点】

【剑指Offer学习】【面试题59:对称的二叉树】

【剑指Offer学习】【面试题60:把二叉树打印出多行】

第61-67题


【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】

【剑指Offer学习】【面试题62:序列化二叉树】

【剑指Offer学习】【面试题63:二叉搜索树的第k个结点】

【剑指Offer学习】【面试题64:数据流中的中位数】

【剑指Offer学习】【面试题65:滑动窗口的最大值】

【剑指Offer学习】【面试题66:矩阵中的路径】

【剑指Offer学习】【面试题67:机器人的运动范围】

特别声明


欢迎转载,转载请注明出处【http://blog.csdn.net/DERRANTCM/article/details/46887821

原文地址:https://www.cnblogs.com/windy-xmwh/p/9307404.html

时间: 2024-10-07 17:46:41

【剑指Offer学习】【所有面试题汇总】的相关文章

【剑指Offer学习】【面试题:二维数组中的查找】PHP实现

最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 拿到这个题目.我们第一个反应,就是遍历二维数组.然后逐个进行比较.我们不难用PHP进行实现.于是有了下面的代码 1 function TwoArrayFind($array,$search) { 2 $found = false; 3 4 if(e

【剑指Offer学习】【面试题65:滑动窗体的最大值】

题目:给定一个数组和滑动窗体的大小,请找出全部滑动窗体里的最大值. 举例说明 比如,假设输入数组{2,3,4,2,6,2,5,1}及滑动窗体的大小.那么一共存在6个滑动窗体,它们的最大值分别为{4,4,6,6,6,5}. 解题思路 假设採用蛮力法,这个问题似乎不难解决:能够扫描每个滑动窗体的全部数字并找出当中的最大值.假设滑动窗体的大小为k,须要O(k)时间才干找出滑动窗体里的最大值.对于长度为n的输入数组,这个算法总的时间复杂度是O(nk). 实际上一个滑动窗体能够看成是一个队列.当窗体滑动时

【剑指Offer学习】【面试题36:数组中的逆序对】

题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 举例分析 例如在数组{7, 5, 6, 4 中, 一共存在5 个逆序对,分别是(7, 6).(7,5),(7, 4).(6, 4)和(5, 4). 解题思路: 第一种:直接求解 顺序扫描整个数组.每扫描到一个数字的时候,逐个比较该数字和它后面的数字的大小.如果后面的数字比它小,则这两个数字就组成了一个逆序对.假设数组中含有n 个数字.由于每个数字都要和O(n)个数字作

【剑指Offer学习】【面试题14 :调整数组顺序使奇数位于偶数前面】

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位予数组的后半部分. 这个题目要求把奇数放在数组的前半部分, 偶数放在数组的后半部分,因此所有的奇数应该位于偶数的前面.也就是说我们在扫描这个数组的时候, 如果发现有偶数出现在奇数的前面,我们可以交换它们的顺序,交换之后就符合要求了. 因此我们可以维护两个指针,第一个指针初始化时指向数组的第一个数字,它只向后移动:第二个指针初始化时指向数组的最后一个数字, 它只向前移动.在两个指针相遇之前,第一

【剑指Offer学习】【面试题33:把数组排成最小的数】

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 例子说明: 例如输入数组{3, 32, 321},则扫描输出这3 个数字能排成的最小数字321323. 解题思路: 第一种:直观解法 先求出这个数组中所有数字的全排列,然后把每个排列拼起来,最后求出拼起来的数字的最大值. 第二种:排序解法 找到一个排序规则,数组根据这个规则排序之后能排成一个最小的数字.要确定排序规则,就要比较两个数字,也就是给出两个数字m 和n,我们需要确定一个规则判断m 和n

【剑指Offer学习】【面试题52:构建乘积数组】

题目:给定一个数组A[0,1,-,n-1],请构建一个数组B[0,1,-,n-1],其中B中的元素B[i]=A[0]×A[1]×-×A[i-1]×A[i+1]×-×A[n-1],不能使用除法. 解题思路 例如:A[]={1,2,3}求B[] B[0]=A[1]×A[2]=2×3=6 B[1]=A[0]×A[2]=1×3=3 B[2]=A[0]×A[1]=1×2=2 1.B[0]初始化为1,从下标i=1开始,先求出C[i]的值并放入B[i],即B[i]=C[i]=C[i-1]×A[i-1],所以B

【剑指Offer学习】【面试题29 :数组中出现次数超过一半的数字】

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字 例子说明: 如输入一个长度为9 的数组{ 1, 2, 3, 2, 2, 2, 5, 4, 2}.由于数字2在数组中出现了5 次,超过数组长度的一半,因此输出2 . 解题思路: 解法一:基于Partition 函数的O(n)算法 数组中有一个数字出现的次数超过了数组长度的一半.如果把这个数组排序,那么排序之后位于数组中间的数字一定就是那个出现次数超过数组长度一半的数字.也就是说,这个数字就是统计学上的中位数,即长度为n 的数组中第

【剑指Offer学习】【面试题31:连续子数组的最大和】

题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). 例子说明: 例如输入的数组为{1, -2, 3, 10, -4, 7, 2, -5},和最大的子数组为{3, 10, -4, 7, 2}.因此输出为该子数组的和18 . 解题思路: 解法一:举例分析数组的规律. 我们试着从头到尾逐个累加示例数组中的每个数字.初始化和为0.第一步加上第一个数字1, 此时和为1.接下来第二步加上数字-2,和就变成了-1.第三步

【剑指Offer学习】【面试题17 ::合并两个排序的链表】

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的 链表结点定义如下: public static class ListNode { int value; ListNode next; } 解题思路: 见代码注释 代码实现: public class Test17 { public static class ListNode { int value; ListNode next; } /** * 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递