剑指offer
一个想努力学技术的程序员
我本想不加班,结果天天加班
展开
-
JZ86 在二叉树中找到两个节点的最近公共祖先
示例1输入:{3,5,1,6,2,0,8,#,#,7,4},5,1返回值:3示例2输入:{3,5,1,6,2,0,8,#,#,7,4},2,7返回值:2第一种解法使用递归解决,将每个节点的左子树,每个节点的右子树都当做一个新的完整的树,进行递归判断即可,判断逻辑为* step 1:如果o1和o2中的任一个和root匹配,那么root就是最近公共祖先。* step 2:如果都不匹配,则分别递归左、右子树。* step 3:如果有一个节点出现在左子树,并且另一个节...原创 2022-04-26 14:20:35 · 1698 阅读 · 0 评论 -
剑指offer-JZ18 删除链表的节点(Java版)
描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点数据范围:0<=链表节点值<=100000<=链表长度<=10000示例1输入:{2,5,1,9},5返回值:{2,1,9}说明:给定你链表中值为 5 的第二个节原创 2022-04-11 17:18:37 · 1051 阅读 · 0 评论 -
JZ44 数字序列中某一位的数字(Java版)
描述数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。示例1输入:0返回值:0示例2输入:2返回值:2示例3输入:10返回值:1示例4输入:13返回值:1第一种解法思路:数学先观察数字规律小于10,1~9,9个数字,9位小于100,10~99,90个数字,180位原创 2022-03-29 09:07:28 · 538 阅读 · 0 评论 -
剑指offer-把数字翻译成字符串(Java版)
描述有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。现在给一串数字,返回有多少种可能的译码结果数据范围:字符串长度满足 0 < n \le 900<n≤90进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)示例1输入:"12"返回值:2说明:2种可能的译码结果(”ab” 或”l”)示例2输入:"31717126241541717"返回值:192说明:192种可能的译码结果原创 2022-03-12 11:48:38 · 1071 阅读 · 0 评论 -
剑指offer-JZ48 最长不含重复字符的子字符串(Java版)
描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。数据范围:\ \text{s.length}\le 40000 s.length≤40000示例1输入:"abcabcbb"返回值:3说明:因为无重复字符的最长子串是"abc",所以其长度为 3。示例2输入:"bbbbb"返回值:1说明:因为无重复字符的最长子串是"b",所以其长度为 1。示例3输入:"pwwkew"返回值:3说明:因为无重复字符的最长子串是 "wke原创 2022-03-07 17:43:30 · 498 阅读 · 0 评论 -
剑指offer-JZ47 礼物的最大价值(Java版)
描述在一个m\times nm×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?如输入这样的一个二维数组,[[1,3,1],[1,5,1],[4,2,1]]那么路径 1→3→5→2→1 可以拿到最多价值的礼物,价值为12示例1输入:[[1,3,1],[1,5,1],[4,2,1]]返回原创 2022-03-04 15:58:02 · 617 阅读 · 0 评论 -
剑指offer-JZ63 买卖股票的最好时机(一)(Java版)
描述假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天2.如果不能获取到任何利润,请返回03.假设买入卖出均无手续费4要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)示例1输入:[8,9,2,5,4,7,1]返回值:5说明:在第3天(股票价格 = 2)..原创 2022-03-04 14:51:38 · 156 阅读 · 0 评论 -
设计LRU缓存结构(Java版)
描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能1. set(key, value):将记录(key, value)插入该结构2. get(key):返回key对应的value值提示:1.某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的,然后都会刷新缓存。2.当缓存的大小超过k时,移除最不经常使用的记录。3.输入一个二维数组与k,二维数组每一维有2个或者3个数字,第1个数字为opt,第2,3个数字为key原创 2022-03-03 11:40:18 · 774 阅读 · 0 评论 -
剑指offer-剪绳子(Java版)
描述给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m <= n ),每段绳子的长度记为 k[1],...,k[m] 。请问 k[1]*k[2]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18 。数据范围: 2 \le n \le 602≤n≤60进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)原创 2022-02-26 11:29:57 · 265 阅读 · 0 评论 -
剑指Offer(六十六):二维数组的运动范围(Java版)
描述地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 例如,当 threshold 为 18 时,机器人能够进入方格 [35,37] ,因为 3+5+3+7 = 18。但是,它不能进入方格 [35,38] ,因为 3+5+3+8 = 19 。请问该机器人能够达到多少个格子?数据范围原创 2022-02-17 17:30:50 · 271 阅读 · 0 评论 -
剑指Offer(六十五):矩阵中的路径(Java版)
描述输入:[[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcced"返回值:true示例2输入:[[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcb"返回值:false备注:0 <= matrix.length <= 2000 <= matrix[i].length <= 200第一种解法遍历矩阵,找到起点,然后使用递归分别从上下左右找到剩余节点,得注意一点就是,当前节点遍历以后,应该替换为特殊字原创 2022-02-17 14:49:29 · 269 阅读 · 0 评论 -
剑指Offer(六十四):滑动窗口的最大值(Java版)
描述给定一个长度为 n 的数组 num 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6原创 2022-02-16 16:46:12 · 758 阅读 · 0 评论 -
剑指Offer(六十三):数据流中的中位数(Java版)
描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。数据范围:数据流中数个数满足,大小满足进阶: 空间复杂度, 时间复杂度示例1输入[5,2,3,4,1,6,7,0,8]返回值:"5.00 3.50 3.00 3.50 3.00 3.50 4...原创 2022-01-11 18:07:17 · 1434 阅读 · 0 评论 -
剑指Offer(六十二):二叉搜索树的第k个结点(Java版)
数据范围: 0 \le n \le10000≤n≤1000,0 \le k \le10000≤k≤1000,树上每个结点的值满足0 \le val \le 10000≤val≤1000进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)如输入{5,3,7,2,4,6,8},3时,二叉树{5,3,7,2,4,6,8}如下图所示:该二叉树所有节点按结点值升序排列后可得[2,3,4,5,6,7,8],所以第3个结点的结点值为4,故返回对应结点值为4的结点即可。示例1输入原创 2022-01-11 16:25:13 · 1755 阅读 · 0 评论 -
剑指Offer(六十一):序列化二叉树(Java版)
描述请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字符串进行约束,但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。二叉树的序列化(Serialize)是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树等遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#)二叉树的反序列化(Deserialize)是指:根据某种遍历顺序得到原创 2022-01-11 15:05:43 · 1880 阅读 · 0 评论 -
剑指Offer(六十):把二叉树打印成多行(Java版)
描述给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树多行打印层序遍历的结果是[[1],[2,3],[4,5]]数据范围:二叉树的节点数0 \le n \le 10000≤n≤1000,0 \le val \le 10000≤val≤1000要求:空间复杂度O(n)O(n),时间复杂度O(n)O...原创 2022-01-07 14:40:52 · 1579 阅读 · 0 评论 -
剑指Offer(五十九):按之字顺序打印二叉树(Java版)
描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足|val| <= 100∣val∣<=100要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]示例1输入:{1,2,3,#,#,.原创 2022-01-07 11:49:21 · 1559 阅读 · 0 评论 -
剑指Offer(五十八):对称的二叉树(Java版)
描述给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如: 下面这棵二叉树是对称的下面这棵二叉树不对称。数据范围:节点数满足0 \le n \le 10000≤n≤1000,节点上的值满足|val| \le 1000∣val∣≤1000要求:空间复杂度O(n)O(n),时间复杂度O(n)O(n)备注:你可以用递归和迭代两种方法解决这个问题示例1输入:{1,2,2,3,4,4,3}返回...原创 2021-12-31 16:04:43 · 2317 阅读 · 0 评论 -
剑指Offer(五十七):二叉树的下一个结点(Java版)
描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示示例:输入:{8,6,10,5,7,9,11},8返回:9解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只原创 2021-12-30 10:16:37 · 1853 阅读 · 0 评论 -
剑指Offer(五十六):删除链表中重复的结点(Java版)
描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5数据范围:链表长度满足,链表中的值满足进阶:空间复杂度,时间复杂度例如输入{1,2,3,3,4,4,5}时,对应的输出为{1,2,5},对应的输入输出链表如下图所示:示例1输入:{1,2,3,3,4,4,5}返回值:{1,2,5}示例2...原创 2021-12-14 20:19:17 · 2784 阅读 · 0 评论 -
剑指Offer(五十五):链表中环的入口结点(Java版)
描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围:n\le10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二...原创 2021-12-13 19:37:23 · 2784 阅读 · 0 评论 -
剑指Offer(五十四):字符流中第一个不重复的字符(Java版)
描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g" 。当从该字符流中读出前六个字符 “google" 时,第一个只出现一次的字符是"l"。数据范围:字符串长度满足,字符串中出现的字符一定在 ASCII 码内。进阶:空间复杂度,时间复杂度后台会用以下方式调用Insert 和FirstAppearingOnce 函数string caseout = "";1.读入测试用例字符串casei...原创 2021-11-30 15:47:10 · 3039 阅读 · 0 评论 -
剑指Offer(五十三):表示数值的字符串(Java)
描述请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。科学计数法的数字(按顺序)可以分成以下几个部分:1.若干空格2.一个整数或者小数3.(可选)一个'e'或'E',后面跟着一个整数(可正可负)4.若干空格小数(按顺序)可以分成以下几个部分:1.若干空格2.(可选)一个符号字符('+'或'-')3. 可能是以下描述格式之一:3.1至少一位数字,后面跟着一个点'.'3.2至少一位数字,后面跟着一个点'.',...原创 2021-11-12 17:38:27 · 3580 阅读 · 0 评论 -
剑指Offer(五十二):正则表达式匹配(Java版)
描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配数据范围:1.str 可能为空,且只包含从a-z的小写字母。2.pattern 可能为空,且只包含从a-z的小写字母以及字符.和*,无连续的'*'。3.1 <= str....原创 2021-11-10 10:58:13 · 3760 阅读 · 0 评论 -
剑指Offer(五十一):构建乘积数组(Java版)
描述给定一个数组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[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。示例1输入:[1,2,3,4,5]返回值:[120,60,40,3原创 2021-10-29 10:56:44 · 4115 阅读 · 0 评论 -
剑指Offer(五十):数组中重复的数字(Java版)
描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1示例1输入:[2,3,1,0,2,5,3]返回值:2说明:2或3都是对的第一种解法简单粗暴,直接双重循环,如果有重复的数据,直接返回即可。代码如下public int firstDup.原创 2021-10-28 19:28:49 · 4131 阅读 · 0 评论 -
剑指Offer(四十九):把字符串转换成整数(Java版)
描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空返回值描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入:"+2147483647"返回值:2147483647示例2输入:"1a33"返回值:0第一种解法首先将第一个字符提取出来,判断是否是“+”或者“-”,直接利用java的工具类转换,如果报错说明不是合法的数字字符串,返回0即可原创 2021-10-25 15:12:17 · 4238 阅读 · 0 评论 -
剑指Offer(四十八-不用加减乘除的加法(Java版)
描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。数据范围:两个数都满足0 \le n \le 10000≤n≤1000进阶:空间复杂度O(1)O(1),时间复杂度O(1)O(1)示例1输入:1,2返回值:3示例2输入:0,0返回值:0第一种解法由于不能用四则运算符号,则只能考虑异或(^ 转换为二进制进行计算,从高位开始比较,相同则为0,相异则为1)或者与(&转换为二进制进行计算,从开始开始比较...原创 2021-10-22 15:39:39 · 4324 阅读 · 0 评论 -
剑指Offer(四十七)-求1+2+3+…+n(Java版)
描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。数据范围:0 < n \le 2000<n≤200进阶: 空间复杂度O(1)O(1),时间复杂度O(n)O(n)示例1输入:5返回值:15示例2输入:1返回值:1第一种解法上述问题明显是一个等差数列求和问题,等差数列求和公式 sn = (a1 + an)*n /2 ,其中an = n,a1 =1;...原创 2021-10-20 10:33:19 · 4585 阅读 · 0 评论 -
剑指offer(四十六)-孩子们的游戏(圆圈中最后剩下的数)(Java版)
描述每年六一儿童节,牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中,有个游戏是这样的:首先,让 n 个小朋友们围成一个大圈,小朋友们的编号是0~n-1。然后,随机指定一个数 m ,让编号为0的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客礼品,请你试着想下,哪个小朋友会得到这份礼品呢?数据范围...原创 2021-10-15 10:37:19 · 5650 阅读 · 0 评论 -
剑指offer(四十五)-扑克牌顺子(Java版)
描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:1. A为1,J为11,Q为12,K为13,A不能视为142. 大、小王为 0,0可以看作任意牌3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]要求:空间复杂度O(1)O(1),时间复杂度O(nlogn)O(nlogn),本题也有时间复杂度O(n)O(n)的解法...原创 2021-10-14 15:45:03 · 4691 阅读 · 0 评论 -
剑指offer(四十四)-翻转单词序列(Java版)
描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?示例1输入:"nowcoder. a am I"返回值:"I am a nowcoder."第一种解法使用栈来实现,原创 2021-10-12 17:50:57 · 4686 阅读 · 0 评论 -
剑指offer(四十三)-左旋转字符串(Java版)
描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!示例1输入:"abcXYZdef",3返回值:"XYZdefabc"第一种解法利用强大的java工具类来完成,直接使用string.substrin.原创 2021-10-12 17:29:00 · 4720 阅读 · 0 评论 -
剑指offer(四十二)-和为S的两个数字(Java版)
描述输入一个递增排序的数组array和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。数据范围:0<=len(array)<=1051<=array[i]<=106示例1输入:[1,2,4,7,11,15],15返回值:[4,11]说明:返回[4,11]或者[11,4]都是可以的示例2输入:[1,5,11],10返回值:[]说明:不存在,返回空原创 2021-10-11 16:40:48 · 4740 阅读 · 0 评论 -
剑指offer(四十一)-和为S的连续正数序列(Java版)
描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序示例1输入:9返回值:[[2,3,4],原创 2021-10-11 14:35:55 · 4776 阅读 · 0 评论 -
剑指offer(四十)-数组中只出现一次的两个数字(Java版)
示例1输入:[1,4,1,6]返回值:[4,6]说明:返回的结果中较小的数排在前面示例2输入:[1,2,3,3,2,9]返回值:[1,9]这个题的解法,可以参考 “剑指offer(三十四)-第一个只出现一次的字符”这篇文章。第一种解法使用一个map来进行存储,遍历完成以后,取出次数为1的数据即可。代码如下public int[] firstFindNumsAppearOnce (int[] array) { int[] result = n...原创 2021-09-28 16:37:09 · 5340 阅读 · 0 评论 -
剑指offer(三十九)-平衡二叉树(Java版)
输入描述:输入一棵二叉树的根节点返回值描述:输出一个布尔类型的值示例1输入:{1,2,3,4,5,6,7}返回值:true示例2输入:{}返回值:true利用上一篇文章,如何求二叉树的深度,我们在求二叉树的深度过程中,同时判断左节点树和右节点树的深度差距是否大于1即可。如果满足则继续递归,不满足则直接返回失败,代码如下public boolean IsBalanced_Solution(TreeNode root) { int balanc...原创 2021-09-28 15:14:11 · 5165 阅读 · 0 评论 -
剑指offer(三十八)-二叉树的深度(Java版)
描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例1输入:{1,2,3,4,5,#,6,#,#,7}返回值:4第一种解法循环所有情况,对于递归熟悉的同学,使用递归来完成,非常简单,取最长路径即可。代码如下public int firstTreeDepth(TreeNode root) { if(null == root ){ return 0;原创 2021-09-27 17:06:46 · 5191 阅读 · 0 评论 -
剑指offer(三十七)-数字在升序数组中出现的次数(Java版)
示例1输入:[1,2,3,3,3,3,4,5],3返回值:4示例2输入:[1,3,4,5],6返回值:0第一种解法简单暴力,直接循环即可,由于数组是非降序数组,循环的时候,判断当前值是否大于判断值,如果大于的话,终止循环,返回结果即可。代码如下public int firstGetNumberOfK(int [] array , int k) { int result = 0; if(null == array || array.len...原创 2021-09-27 14:59:35 · 5231 阅读 · 0 评论 -
剑指offer(三十六)-两个链表的第一个公共结点(Java版)
描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)示例1输入:{1,2,3},{4,5},{6,7}返回值:{6,7}说明:第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部分这3个参数最后在后台会组装成为2个两个无环的单链表,且是有公共节点的示例2输入:{1.原创 2021-09-24 17:08:48 · 5430 阅读 · 0 评论