自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 资源 (3)
  • 收藏
  • 关注

原创 剑指offer(Java实现)68 - 树中两个结点的最低公共祖先

树中两个结点的最低公共祖先-68给出一个二叉树,输入两个树节点,求它们的最低公共祖先。一个树节点的祖先节点包括它本身。注意:输入的二叉树不为空;输入的两个节点一定不为空,且是二叉树中的节点;样例二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示: 8 / \ 12 2 / \ ...

2019-11-14 09:59:06 190

原创 剑指offer(Java实现)67 - 把字符串转换成整数

把字符串转换成整数-67请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。样例输入:"123"输出:123注意:你的函数应满足下列条件:忽略所有行首空格,找到第一个非空格字符,可以是 ‘+/−’ 表示是正数或者负数,紧随其后找到最长的一串连续数字,将其解析成一个整数;整数后可能有任意非数字字符,请将其忽略;如果整数长...

2019-09-11 12:11:51 231

原创 剑指offer(Java实现)66 - 构建乘积数组

构建乘积数组-66给定一个数组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]。不能使用除法。样例输入:[1, 2, 3, 4, 5]输出:[120, 60, 40, 30, 24]思考题:能不能只使用常数空间?(除了输出的数组之外)思路:左乘一次,...

2019-09-11 12:10:17 132

原创 剑指offer(Java实现)65 - 不用加减乘除做加法

不用加减乘除做加法-65写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ 四则运算符号。样例输入:num1 = 1 , num2 = 2输出:3思路:1)不考虑进位对每一位相加:1加0,0加1都等于1,而0加0,1加1等于0,所以使用异或^操作2)计算进位:只有1加1产生进位,所以采用位与 &操作,再左移 1位3)将和与进位相加,即重复前两步操作,结束判断...

2019-09-11 12:09:04 96

原创 剑指offer(Java实现)64 - 求1+2+…+n

求1+2+…+n-64求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。样例输入:10输出:55思路:利用 && 和 || 的短路特性对于A && B,如果A为假,那么就不执行B了;而如果A为真,就会执行B。对于A || B,如果A为真,那么就会不执行B了;而如果...

2019-09-11 12:08:33 134

原创 剑指offer(Java实现)63 - 股票的最大利润

股票的最大利润-63假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖 一次 该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为 [9, 11, 8, 5, 7, 12, 16, 14]。如果我们能在价格为5的时候买入并在价格为 16 时卖出,则能收获最大的利润11。样例输入:[9, 11, 8, 5, 7, 12, 16, 14]输出:11思路:遍历每一个数字...

2019-09-11 12:07:50 364

原创 剑指offer(Java实现)62 - 圆圈中最后剩下的数字

圆圈中最后剩下的数字-620, 1, …, n-1 这 n 个数字(n>0)排成一个圆圈,从数字 0 开始每次从这个圆圈里删除第 m 个数字。求出这个圆圈里剩下的最后一个数字。样例输入:n=5 , m=3输出:3思路:采用链表来模拟,每次对长度取模来实现循环。假设当前删除的结点下标为 removeIndex,则下一个要删除的结点的下标为:(removeIndex + m - ...

2019-09-11 12:07:20 109

原创 剑指offer(Java实现)61 - 扑克牌的顺子

扑克牌的顺子-61从扑克牌中随机抽5张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K 为 13,大小王可以看做任意数字。为了方便,大小王均以 0 来表示,并且假设这副牌中大小王均有两张。样例1输入:[8,9,10,11,12]输出:true样例2输入:[0,8,9,11,12]输出:true思路:排序后记录 0 出现...

2019-09-11 12:06:49 105

原创 剑指offer(Java实现)60 - n个骰子的点数

n个骰子的点数-60将一个骰子投掷n次,获得的总点数为s,s的可能范围为n~6n。掷出某一点数,可能有多种掷法,例如投掷2次,掷出3点,共有[1,2],[2,1]两种掷法。请求出投掷n次,掷出n~6n点分别有多少种掷法。样例1输入:n=1输出:[1, 1, 1, 1, 1, 1]解释:投掷1次,可能出现的点数为1-6,共计6种。每种点数都只有1种掷法。所以输出[1, 1, 1, 1,...

2019-09-11 12:06:20 293

原创 剑指offer(Java实现)59 - 滑动窗口的最大值

滑动窗口的最大值-59-1给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。注意:数据保证k大于0,且k小于等于数组长度。样例输入:[2, 3, 4, 2, 6, 2, 5, 1] , k=3输出: [...

2019-09-11 12:05:48 123

原创 剑指offer(Java实现)58 - 翻转,左旋转字符串

翻转字符串-58-1输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。样例输入:"I am a student."输出:"student. a am I"思路:使用 StringBuilder 类class Solution { ...

2019-09-11 12:05:18 151

原创 剑指offer(Java实现)57 - 和为S的连续正数序列

和为S的连续正数序列-57-2输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。样例输入:15输出:[[1,2,3,4,5],[4,5,6],[7,8]]思路:滑动窗口。用两个指针,low = 1,high = 2。每次当前和小于目标时high++,大于...

2019-09-11 12:04:28 119

原创 剑指offer(Java实现)57 - 和为S的两个数字

和为S的两个数字-57-1输入一个数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。你可以认为每组输入中都至少含有一组满足条件的输出。样例输入:[1,2,3,4] , sum=7输出:[3,4]思路:如果数组是无序的,可以使用哈希表。class Solution { public int[] findNumbersW...

2019-09-11 12:03:55 173

原创 剑指offer(Java实现)56 - 数组中唯一只出现一次的数字

数组中唯一只出现一次的数字-56-2在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。你可以假设满足条件的数字一定存在。思考题:如果要求只使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?样例输入:[1,1,1,2,2,2,3,4,4,4]输出:3思路:统计数组中所有数字的各个位之和,若 bit[i] % 3 != 0,说...

2019-09-10 23:31:37 175

原创 剑指offer(Java实现)56 - 数组中只出现一次的两个数字

数组中只出现一次的两个数字-56-1一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。你可以假设这两个数字一定存在。样例输入:[1,2,3,3,4,4]输出:[1,2]思路:先依次异或,出现两次的数字都会变成0,两个只出现一次的数字肯定至少有一位是不同的,找到这一位,用来把数组分成两部分,然后分别异或,即可得到结果。class Solu...

2019-09-10 23:31:11 169

原创 剑指offer(Java实现)55 - 二叉树的深度,平衡二叉树

二叉树的深度-55-1输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。样例输入:二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示: 8 / \ 12 2 / \ 6 4输出:3思路:cla...

2019-09-10 23:30:37 92

原创 剑指offer(Java实现)54 - 二叉搜索树的第k个结点

二叉搜索树的第k个结点-54给定一棵二叉搜索树,请找出其中的第k小的结点。你可以假设树和k都存在,并且1≤k≤树的总结点数。样例输入:root = [2, 1, 3, null, null, null, null] ,k = 3 2 / \ 1 3 输出:3思路:中序遍历的同时计数class Solution { public TreeNode ...

2019-09-10 23:29:45 69

原创 剑指offer(Java实现)53 - 数组中数值和下标相等的元素

数组中数值和下标相等的元素-53-3假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。样例输入:[-3, -1, 1, 3, 5]输出:3注意:如果不存在,则返回-1。思路:直接标准二分查找class Solution { publi...

2019-09-10 23:29:15 112

原创 剑指offer(Java实现)53 - 0到n-1中缺失的数字

0到n-1中缺失的数字-53-2一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。样例输入:[0,1,2,4]输出:3思路:如果数组是乱序的可以采用这种方法。一个数和他自己异或的结果是0,因此用0~n-1依次与数组中的数进行异或,最后剩余的结果就是缺失的数字。时间复杂...

2019-09-10 23:28:44 147

原创 剑指offer(Java实现)53 - 数字在排序数组中出现的次数

数字在排序数组中出现的次数-53-1统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。样例输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3输出:4思路:先用二分法找到目标值,然后使用两个指针从中间扩散。class Solution { public int...

2019-09-10 23:28:08 99

原创 剑指offer(Java实现)52 - 两个链表的第一个公共节点

两个链表的第一个公共节点-52输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。样例给出两个链表如下所示:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3输出:第...

2019-09-10 23:27:37 81

原创 剑指offer(Java实现)51 - 数组中的逆序对

数组中的逆序对-51在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。样例输入:[1,2,3,4,5,6,0]输出:6思路:如果遍历数组,对每个数字都和后面的数字比较大小,时间复杂度为 O(n^2),效率太低。利用归并排序的思想,先将数组分解成为 n 个长度为 1 的子数组,然后进行两两合并同时排好顺序。在...

2019-09-10 23:27:07 104

原创 剑指offer(Java实现)50 - 字符流中第一个只出现一次的字符

字符流中第一个只出现一次的字符-50-2请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是’g’。当从该字符流中读出前六个字符”google”时,第一个只出现一次的字符是’l’。如果当前字符流没有存在出现一次的字符,返回#字符。样例输入:"google"输出:"ggg#ll"解释:每当字符流读入一个字符,就进...

2019-09-10 23:26:13 132

原创 剑指offer(Java实现)50 - 字符串中第一个只出现一次的字符

字符串中第一个只出现一次的字符-50-1在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出b。如果字符串中不存在只出现一次的字符,返回#字符。样例:输入:"abaccdeff"输出:'b'思路:class Solution{ // 用数组实现 hash表 '0' 为 ASCII 的第一个字符 public char firstNotRepeating...

2019-09-09 23:15:39 111

原创 剑指offer(Java实现)49 - 丑数

丑数-49我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。求第n个丑数的值。样例输入:5输出:5注意:习惯上我们把1当做第一个丑数。首先,判断一个数是不是丑数class Solution { public boolean isUgly(int num) { if(num <= 0)...

2019-09-09 23:15:07 110

原创 剑指offer(Java实现)48 - 最长不含重复字符的子字符串

最长不含重复字符的子字符串-48LeetCode-3请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从 ’a’ 到 ’z’ 的字符。样例输入:"abcabc"输出:3思路:滑动窗口通过使用 Hash Set 作为滑动窗口,我们可以用 O(1)的时间来完成对字符是否在当前的子字符串中的检查。回到我们的问题,我们使用 Hash Set...

2019-09-09 23:14:35 179

原创 剑指offer(Java实现)47 - 礼物的最大价值

礼物的最大价值-47在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?注意:m, n > 0样例:输入:[ [2,3,1], [1,7,1], [4,6,1]]输出:19解释:...

2019-09-09 23:13:50 58

原创 剑指offer(Java实现)46 - 把数字翻译成字符串

把数字翻译成字符串-46LeetCode解码方法-91给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。样例输入:...

2019-09-09 23:13:13 255

原创 剑指offer(Java实现)45 - 把数组排成最小的数

把数组排成最小的数-45输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。样例输入:[3, 32, 321]输出:321323注意:输出数字的格式为字符串思路:对于数字m和n,可以拼接成mn和nm,如果mn<nm,我们定义m小于n。反之则相反。利用...

2019-09-09 23:12:44 60

原创 剑指offer(Java实现)44 - 数字序列中某一位的数字

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第 5 位(从0开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。请写一个函数求任意位对应的数字。样例输入:13输出:1思路:class Solution { public int digitAtIndex(int n) { int i = 1; ...

2019-09-09 23:12:09 114

原创 剑指offer(Java实现)43 - 从1到n整数中1出现的次数

从1到n整数中1出现的次数-43输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。样例输入: 12输出: 5思路:如果是从头到尾遍历(n次),对每一个数字都计算其1的个数(lgn次),则时间复杂度为O(nlogn),运算效率太低。因此必须总结规律,提高效率。总结规律如...

2019-09-09 23:09:54 83

原创 剑指offer(Java实现)42 - 连续子数组的最大和

输入一个 非空 整型数组,数组里的数可能为正,也可能为负。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。样例输入:[1, -2, 3, 10, -4, 7, 2, -5]输出:18思路:public class Solution42 { public static int maxSum(int[] array) { ...

2019-09-09 23:09:09 67

原创 剑指offer(Java实现)41 - 数据流的中位数

数据流的中位数-41如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。样例输入:1, 2, 3, 4输出:1,1.5,2,2.5解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。思路:使用可变容器,每次加数据进来都排序。时间复杂...

2019-09-09 23:08:25 82

原创 剑指offer(Java实现)40 - 最小的K个数

最小的K个数-40输入n个整数,找出其中最小的k个数。注意:数据保证k一定小于等于输入数组的长度;输出数组内元素请按从小到大顺序排序;样例输入:[1,2,3,4,5,6,7,8] , k=4输出:[1,2,3,4]思路:partitionclass Solution { public List<Integer> getLeastNumbers(int[...

2019-08-15 12:12:07 119

原创 剑指offer(Java实现)39 - 数组中出现次数超过一半的数字

数组中出现次数超过一半的数字-39数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,并且一定存在满足条件的数字。思考题:假设要求只能使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?样例输入:[1,2,1,1,3]输出:1思路:partition思想class Solution { public int moreThanHalf...

2019-08-15 12:11:19 116

原创 剑指offer(Java实现)38 - 数字排列

数字排列-38-1输入一组数字,输出其所有的排列方式。样例输入:[1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]思路:回溯法class Solution { L...

2019-08-15 12:09:13 125

原创 剑指offer(Java实现)37 - 序列化二叉树

序列化二叉树-37请实现两个函数,分别用来序列化和反序列化二叉树。您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为原始树结构。样例你可以序列化如下的二叉树 8 / \ 12 2 / \ 6 4为:"[8, 12, 2, null, null, 6, 4, null, null, null, null]"思路:非递归:cl...

2019-08-15 12:08:04 104

原创 剑指offer(Java实现)36 - 二叉搜索树与双向链表

二叉搜索树与双向链表-36输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。注意:需要返回双向链表最左侧的节点。例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。思路:非递归:使用中序遍历class Solution { public TreeNode convert(TreeNode root...

2019-08-15 12:07:31 95

原创 剑指offer(Java实现)35 - 复杂链表的复制

复杂链表的复制-35请实现一个函数可以复制一个复杂链表。在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。思路:分成三步public class Solution { public RandomListNode Clone(RandomListNode pHead) { if (pHead == null) r...

2019-08-15 12:06:07 80

原创 剑指offer(Java实现)34 - 二叉树中和为某一值的路径

二叉树中和为某一值的路径-34输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。样例给出二叉树如下所示,并给出num=22。 5 / \ 4 6 / / \ 12 13 6 / \ / \9 1 5 1输出:[[5,4,12,1],...

2019-08-15 12:05:08 117

计算机网络.md

计算机网络相关知识,每一层用到的协议以及各种协议的作用。

2019-06-18

回溯算法.md

常见的可以用到回溯算法的问题-LeetCode,以及详细解答。

2019-06-18

IO多路复用.md

同步,异步总结,IO多路复用详解,以及几种实现方式。

2019-06-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除