校招刷题
剑指offer、Leetcode刷题总结
静数秋天
个人博客:weiweiblog
展开
-
[剑指offer] JAVA版题解(完整版)
本文首发于我的个人博客:尾尾部落 序号 题解 牛客 OJ 数据结构类型 03 [剑指offer] 二维数组中的查找 二维数组中的查找 数组 04 [剑指offer] 替换空格 替换空格 字符串 05 [剑指offer] 从尾到头打印链表 从尾到头打印链表 链表 06 [剑指offer] 重建二...原创 2018-08-16 15:26:28 · 66102 阅读 · 10 评论 -
[算法总结] 一文读懂十大排序算法
本文首发于我的个人博客:尾尾部落排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法及其相关的问题。一般在面试中最常考的是快速排序和归并排序等基本的排序算法,并且经常要求现场手写基本的排序算法。如果这些问题回答不好,估计面试就凉凉了。所以熟练掌握排序算法思想及其特点并能够熟练地手写代码至关重要。下面介绍几种常见的排序算法:冒泡排序、选择排序、插入排序、归...原创 2018-08-21 16:22:39 · 510 阅读 · 0 评论 -
[算法总结] 一文搞懂面试链表题
本文首发于我的个人博客:尾尾部落链表是面试过程中经常被问到的,这里把剑指offer 和 LeetCode 中的相关题目做一个汇总,方便复习。1. 在 O(1) 时间删除链表节点题目描述:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 解题思路:常规的做法是从链表的头结点开始遍历,找到需要删除的节点的前驱节点,把它的 next 指向要删除节点的下一个...原创 2018-08-28 12:41:05 · 690 阅读 · 0 评论 -
[算法总结] 20 道题搞定 BAT 面试——二叉树
本文首发于我的个人博客:尾尾部落0. 几个概念完全二叉树:若二叉树的高度是h,除第h层之外,其他(1~h-1)层的节点数都达到了最大个数,并且第h层的节点都连续的集中在最左边。想到点什么没?实际上,完全二叉树和堆联系比较紧密哈~~~满二叉树:除最后一层外,每一层上的所有节点都有两个子节点,最后一层都是叶子节点。哈夫曼树:给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路...原创 2018-09-04 00:33:30 · 286 阅读 · 0 评论 -
[算法总结] 6 道题搞定 BAT 面试——堆栈和队列
本文首发于我的个人博客:尾尾部落0. 基础概念栈:后进先出(LIFO) 队列:先进先出(FIFO) 1. 栈的 java 实现import java.util.Arrays;public class Stack { private int size = 0; //栈顶位置 private int[] array; public...原创 2018-09-04 10:59:14 · 569 阅读 · 0 评论 -
[算法总结] 13 道题搞定 BAT 面试——字符串
本文首发于我的个人博客:尾尾部落1. KMP 算法谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置。KMP 算法把字符匹配的时间复杂度缩小到 O(m+n) ,而空间复杂度也只有O(m)。因为“暴力搜索”的方法会反复回溯主串,导致效率低下,而KMP算法可以利用已经部分匹配这个有效信息,保持主串上的指针不回...原创 2018-09-05 17:04:37 · 423 阅读 · 1 评论 -
BAT面试必备——Java 集合类
本文首发于我的个人博客:尾尾部落http://www.runoob.com/java/java-collections.html” title=”” />https://www.cnblogs.com/jing99/p/7057245.html” title=”” />1. Iterator接口Iterator接口,这是一个用于遍历集合中元素的接口,主要包含...原创 2018-09-09 00:23:45 · 280 阅读 · 0 评论 -
互联网校招面试必备——Java多线程
本文首发于我的个人博客:尾尾部落本文是我刷了几十篇一线互联网校招java后端开发岗位的面经后总结的多线程相关题目,虽然有点小长,但是面试前看一看,相信能帮你轻松啃下多线程这块大骨头。什么是进程,什么是线程?为什么需要多线程编程?进程间的通信方式、线程间的通信方式实现多线程的三种方法三种创建多线程方法的对比线程状态线程控制wait、notify、notifyAll的区别sle...原创 2018-09-19 01:28:28 · 561 阅读 · 0 评论 -
互联网校招面试必备——数据库
本文首发于我的个人博客:尾尾部落DDL(Data Definition Language)数据库定义语言CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAMEDML(Data Manipulation Language)数据操纵语言SELECT、INSERT、UPDATE、DELETE、MERGE、CALL、EXPLAIN PLAN、LOCK TABLE左...原创 2018-09-21 17:17:56 · 1393 阅读 · 0 评论 -
[剑指offer] 旋转数组的最小数字
本文首发于我的个人博客:尾尾部落题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路采用二分查找法。 需要考虑三种情况:ar...原创 2018-08-12 15:41:31 · 155 阅读 · 0 评论 -
[剑指offer] 斐波那契数列
本文首发于我的个人博客:尾尾部落题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39解题思路公式: f(n) = n, n <= 1 f(n) = f(n-1) + f(n-2), n > 1 可以直接使用递归的方法:if(n<=1) return n;el...原创 2018-08-12 17:30:09 · 148 阅读 · 0 评论 -
[剑指offer] 跳台阶
本文首发于我的个人博客:尾尾部落题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路按照题意, 1 级 —- 1 种 2 级 —- 2 种 3 级 —- 3 种 4 级 —- 5 种 5 级 —- 8 种 我们可以得到一种规律,如果要跳 6 级,可以从 5 级跳一步到 6 级,...原创 2018-08-12 17:56:15 · 161 阅读 · 0 评论 -
[剑指offer] 变态跳台阶
本文首发于我的个人博客:尾尾部落题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路f(1) = 1f(2) = f(2-1) + f(2-2) f(3) = f(3-1) + f(3-2) + f(3-3) ...f(n) = f(n-1) + f(n-2) + f...原创 2018-08-12 22:01:48 · 176 阅读 · 0 评论 -
[剑指offer] 矩形覆盖
本文首发于我的个人博客:尾尾部落题目描述我们可以用2 * 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 * 1的小矩形无重叠地覆盖一个2 * n的大矩形,总共有多少种方法?解题思路依旧是斐波那契数列 f(1) = 1 f(2) = 2 当n=3时,它可以由n=2的情况再覆盖一块得到,也可以由 n=1的情况再覆盖 2 块得到,所以 f(3) = f(1) +...原创 2018-08-12 22:22:17 · 147 阅读 · 0 评论 -
[算法总结] 二分查找
本文首发于我的个人博客:尾尾部落二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找。二分查找很好写,却很难写对,据统计只有10%的程序员可以写出没有bug的的二分查找代码。出错原因主要集中在判定条件和边界值的选择上,很容易就会导致越界或者死循环的情况。下面对二分查找及其变形进行总结:1. ...原创 2018-08-16 13:12:44 · 1248 阅读 · 0 评论 -
[剑指offer] 表示数值的字符串
本文首发于我的个人博客:尾尾部落题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。解题思路设置三个标志符分别记录“+/-”、“e/E”和“.”是否出现过。对于“...原创 2018-08-05 23:34:08 · 177 阅读 · 0 评论 -
[剑指offer] 和为S的连续正数序列
本文首发于我的个人博客:尾尾部落题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!...原创 2018-08-07 20:30:43 · 139 阅读 · 0 评论 -
[剑指offer] 扑克牌顺子
本文首发于我的个人博客:尾尾部落题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,...原创 2018-08-07 21:37:35 · 209 阅读 · 0 评论 -
[剑指offer] 求1+2+3+...+n
本文首发于我的个人博客:尾尾部落题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路累加不能用循环的话,那就试试递归吧。 判断递归的终止条件不能用 if 和 switch,那就用短路与代替。 (n > 0) && (sum += Sum_Sol...原创 2018-08-07 22:30:22 · 338 阅读 · 0 评论 -
[剑指offer] 按之字形顺序打印二叉树
本文首发于我的个人博客:尾尾部落题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路设两个栈,s2存放奇数层,s1存放偶数层 遍历s2节点的同时按照左子树、右子树的顺序加入s1, 遍历s1节点的同时按照右子树、左子树的顺序加入s2参考代码imp...原创 2018-08-08 22:00:38 · 130 阅读 · 0 评论 -
[剑指offer] 平衡二叉树
本文首发于我的个人博客:尾尾部落题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路定义:平衡二叉查找树,简称平衡二叉树。可以是空树。假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过1。遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。参考...原创 2018-08-08 22:51:15 · 141 阅读 · 0 评论 -
[剑指offer] 二维数组中的查找
本文首发于我的个人博客:尾尾部落题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数解题思路 二维数组是有序的,从右上角来看,向左数字递减,向下数字递增。 因此从右上角开始查找,当要查找数字比右上角数字大时,下移;...原创 2018-08-09 23:00:51 · 129 阅读 · 0 评论 -
[剑指offer] 替换空格
本文首发于我的个人博客:尾尾部落题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路很简单,从后往前遍历就对了。参考代码public class Solution { public String replaceSpace(St...原创 2018-08-09 23:08:42 · 346 阅读 · 0 评论 -
[剑指offer] 从尾到头打印链表
本文首发于我的个人博客:尾尾部落题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路一种方法是利用栈来实现; 另外一种方法是利用三个指针把链表反转,关键是 r 指针保存断开的节点。 参考代码/*** public class ListNode {* int val;* ListNod...原创 2018-08-09 23:28:19 · 143 阅读 · 0 评论 -
[剑指offer] 重建二叉树
本文首发于我的个人博客:尾尾部落题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路我们知道,前序遍历的第一个节点就是树的根节点,所以我们先根据前序遍历序列的第一个数字创建...原创 2018-08-09 23:46:26 · 175 阅读 · 0 评论 -
[剑指offer] 用两个栈实现队列
本文首发于我的个人博客:尾尾部落题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路两个栈 stack1 和 stack2: push 动作都在 stack1 中进行,pop 动作在 stack2 中进行。当 stack2 不为空时,直接 pop,当 stack2 为空时,先把 stack1 中的元素 pop 出来...原创 2018-08-12 12:14:46 · 155 阅读 · 0 评论 -
[剑指offer] 把字符串转换成整数
本文首发于我的个人博客:尾尾部落题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。解题思路常规思路,先判断第一位是不是符号位,如果有符号,有flag 做标记。 遍历字符串中的每个字符,如果存在非数字的...原创 2018-07-29 22:10:03 · 157 阅读 · 0 评论 -
[剑指offer] 序列化二叉树
本文首发于我的个人博客:尾尾部落题目描述请实现两个函数,分别用来序列化和反序列化二叉树解题思路对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点不为空时,在转化val所得的字符之后添加一个’,’作为分割; 对于空节点则以 ‘#,’ 代替。对于反序列化:将字符串按照“,”进行分割,插入到队列中,然后依次从队列中取出字符建立节点,递归创建一个...原创 2018-08-01 22:30:54 · 130 阅读 · 0 评论 -
[剑指offer] 构建乘积数组
本文首发于我的个人博客:尾尾部落题目描述给定一个数组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]。不能使用除法。解题思路 B[i]的值可以看作图中矩阵第 i 行所有元素的乘积。我们可以先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过...原创 2018-08-01 23:22:36 · 148 阅读 · 0 评论 -
[剑指offer] 和为S的两个数字
本文首发于我的个人博客:尾尾部落题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。解题思路法一:哈希法。用一个HashMap,它的 key 存储数S与数组中每个数的差,value 存储当前的数字,比较S=15, 当前的数为 4,则往 hashmap 中插入(key=11, value=...原创 2018-07-28 18:16:57 · 143 阅读 · 0 评论 -
[剑指offer] 删除链表中重复的结点
本文首发于我的个人博客:尾尾部落题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题思路首先添加一个头节点,以方便碰到第一个,第二个节点就相同的情况设置 first ,second 指针,...原创 2018-07-28 23:23:28 · 125 阅读 · 0 评论 -
[剑指offer] 字符流中第一个不重复的字符
本文首发于我的个人博客:尾尾部落题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。解题思路用一个哈希表来存储每个字符及其出现的次数,另外用一个字符串 s 来保存字符流中字符的顺序。每次插入的时候,...原创 2018-07-29 19:54:40 · 166 阅读 · 0 评论 -
[剑指offer] 二叉树的深度
本文首发于我的个人博客:尾尾部落题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路法一:递归法。求二叉树的深度,就是求左子树、右子树的中深度最大的加上一个根节点,依此递归即可。 法二:层次遍历。每遍历一层,deep 加 1,直接到最后一层,输出 deep。参考代码法一:递...原创 2018-07-29 20:51:23 · 134 阅读 · 0 评论 -
[剑指offer] 对称的二叉树
本文首发于我的个人博客:尾尾部落题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路法一:递归。根节点的左右子树相同,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可。 法二:非递归。非递归也是一样,采用栈或队列存取各级子树根节点。参考代码法一:递归。...原创 2018-07-27 11:29:08 · 110 阅读 · 0 评论 -
[剑指offer] 把二叉树打印成多行
本文首发于我的个人博客:尾尾部落题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解题思路就是二叉树的层序遍历,用队列来实现。我们需要两个变量,一个start记录当前层已经打印的节点个数,一个end记录前当层所有的节点个数,当 start == end 时,表时当前层遍历完了,就可以开始下一层遍历。参考代码import java.u...原创 2018-07-27 14:04:09 · 153 阅读 · 0 评论 -
[剑指offer] 数组中重复的数字
本文首发于我的个人博客:尾尾部落题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路最简单的就是用一个数组或者哈希表来存储已经遍历过的数字,但...原创 2018-07-27 21:33:15 · 137 阅读 · 0 评论 -
[剑指offer] 孩子们的游戏(圆圈中最后剩下的数)
本文首发于我的个人博客:尾尾部落题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始...原创 2018-07-28 10:23:07 · 166 阅读 · 0 评论 -
[剑指offer] 数组中只出现一次的数字
本文首发于我的个人博客:尾尾部落题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。解题思路法一:大家都能想到的HashMap法 法二:异或法 任何一个数字异或它自己都等于0。如果数组中只一个数字是只出现一次的,其他数字都是成双成对出现的,那么我们从头到尾依次异或数组中的每个数字,最终的结果刚好就是那个只...原创 2018-07-26 21:30:16 · 147 阅读 · 0 评论 -
[剑指offer] 不用加减乘除做加法
本文首发于我的个人博客:尾尾部落题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题思路用位运算来实现。step1: 进行异或运算,计算两个数各个位置上的相加,不考虑进位;step2: 进行位与运算,然后左移一位,计算进位值;step3: 把异或运算的结果赋给 num1,把进位值赋给 num2,依此循环,进位值为空的时候结...原创 2018-07-27 10:27:18 · 173 阅读 · 0 评论 -
[剑指offer] 数据流中的中位数
本文首发于我的个人博客:尾尾部落题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。解题思路我们可以将数据排序后分为两部分,左边部分的...原创 2018-07-26 16:02:04 · 125 阅读 · 0 评论