剑指offer
littlehaes
这个作者很懒,什么都没留下…
展开
-
剑指offer 面试题44 (java版) 数字序列中某一位的数字
welcome to my blog剑指offer面试题44(java版):数字序列中某一位的数字题目描述数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11...原创 2020-02-26 23:01:15 · 437 阅读 · 0 评论 -
剑指offer 面试题68(java版):二叉搜索树的最近公共祖先
welcome to my blog剑指offer面试题68(java版):二叉搜索树的最近公共祖先题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:&...原创 2020-02-25 20:56:37 · 252 阅读 · 0 评论 -
剑指offer 面试题60(java版):n个骰子的点数
welcome to my blog剑指offer 面试题60(java版):n个骰子的点数题目描述把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 示例 1:输入: 1输出: [0.1666...原创 2020-02-24 10:24:24 · 463 阅读 · 0 评论 -
剑指offer面试题48(java版):最长不含重复字符的子字符串
welcome to my blog剑指offer面试题48(java版):最长不含重复字符的子字符串题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无...原创 2020-02-23 10:16:01 · 1134 阅读 · 0 评论 -
剑指offer面试题47(java版):礼物的最大价值
welcome to my blog剑指offer面试题47(java版):礼物的最大价值题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1:输入: [...原创 2020-02-23 09:58:20 · 998 阅读 · 0 评论 -
剑指offer面试题46(java版):把数字翻译成字符串
welcome to my blog剑指offer面试题46(java版):把数字翻译成字符串题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成“z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: ...原创 2020-02-22 10:39:19 · 524 阅读 · 0 评论 -
剑指offer面试题51(java版):数组中的逆序对
welcome to my blog剑指offer面试题51(java版):数组中的逆序对暴力解(不通过)写一写暴力解感受感受public class Solution { public int InversePairs(int [] array) { //input check if(array.length<1) ...原创 2019-06-24 10:24:34 · 1350 阅读 · 0 评论 -
剑指offer面试题52(java版):两个链表的第一个公共节点
welcome to my blog剑指offer面试题52(java版):两个链表的第一个公共节点题目描述输入两个链表,找出它们的第一个公共结点思路两个节点相等,是指针指向的引用相等,不仅仅是节点的值相等比较容易想到的是从后往前比,找到最后一个相同的节点,缺点是需要辅助空间书上给的思路更好,从前往后比,不需要辅助空间先找出两个链表的长度m,n不妨假设m>n, 先让第一...原创 2019-06-24 10:24:53 · 423 阅读 · 0 评论 -
剑指offer面试题53(java版):数字在排序数组中出现的次数
welcome to my blog剑指offer面试题53(java版):数字在排序数组中出现的次数题目描述统计一个数字在排序数组中出现的次数思路找到第一个k的索引和最后一个k的索引就知道有序数组中k出现的次数了笔记二分法中,最好先判断arr[mid]>k, 接着arr[mid]<k, 剩下的便是arr[mid]==k, arr[mid]==k这个条件就不用显式地...原创 2019-06-24 10:25:15 · 568 阅读 · 0 评论 -
剑指offer面试题54(java版):二叉搜索树的第K小节点
welcome to my blog剑指offer面试题54(java版):二叉搜索树的第K小节点题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4思路见注释笔记一定要弄清楚所使用的的递归函数的逻辑本题使用的递归函数的逻辑: 针对当前节点p,先判断p的左子节点是否为第k小节点,是的话...原创 2019-06-24 10:25:42 · 665 阅读 · 0 评论 -
剑指offer面试题55(java版):二叉树的深度
welcome to my blog剑指offer面试题55(java版):二叉树的深度题目一描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度思路见注释题目一代码public class Solution { public int TreeDepth(TreeNode root) { ...原创 2019-07-02 17:17:12 · 397 阅读 · 0 评论 -
剑指offer面试题56(java版):数组中只出现一次的数字
welcome to my blog剑指offer面试题56(java版):数组中只出现一次的数字题目1描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解题思路见注释笔记数组作为参数, 在函数内部修改后, 在函数外部也是修改后的值了//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为...原创 2019-07-02 17:18:16 · 568 阅读 · 0 评论 -
剑指offer面试题50(java版):第一个只出现一次的字符
welcome to my blog剑指offer面试题50(java版):第一个只出现一次的字符题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).思路使用哈希表实现, 扫描两次字符串, 第一次统计次数, 第二次找到第一个出现次数为1的字符串笔记为什么要用Li...原创 2019-06-24 10:24:04 · 439 阅读 · 1 评论 -
剑指offer面试题49(java版):丑数
welcome to my blog剑指offer面试题49(java版):丑数题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。暴力解法(不满足时间复杂度要求)主要是巩固基础int i,j=1;这种写法只是对j进行了初始化!!!不要在循环内部...原创 2019-06-24 10:23:30 · 395 阅读 · 0 评论 -
剑指offer面试题45(java版):把数组排成最小的数
welcome to my blog剑指offer面试题45(java版):把数组排成最小的数题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路需要额外考虑的一个问题:m和n都在int型能表达的范围内,但它们拼接起来的数字mn和nm用int型表示就有...原创 2019-06-24 10:21:58 · 730 阅读 · 0 评论 -
剑指offer面试题32(java版):从上到下打印二叉树
welcome to my blog剑指offer面试题32(java版):从上到下打印二叉树题目一从上往下打印出二叉树的每个节点,同层节点从左至右打印。笔记Deque类是接口, 不能实例化, 需要借助实现了Deque接口的子类, 比如LinkedList. 如下Deque d = new LinkedList();不要忘记引入import java.util.Deque;和 im...原创 2019-06-12 08:54:42 · 308 阅读 · 0 评论 -
剑指offer面试题31(java版):栈的压入,弹出序列
welcome to my blog剑指offer面试题31(java版):栈的压入,弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度...原创 2019-06-12 08:54:05 · 188 阅读 · 1 评论 -
剑指offer面试题30(java版):包含min函数的栈
welcome to my blog剑指offer面试题30(java版):包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))笔记声明并初始化栈 Stack s = new Stack(); 一般都要加上泛型, 要不默认元素类型为Objects.pedk():查看栈顶元素但并不弹出思路创建一个辅助栈,...原创 2019-06-12 08:53:33 · 299 阅读 · 0 评论 -
剑指offer面试题57(java版):和为s的两个数字 所有和为S的连续正数序列
welcome to my blog剑指offer面试题57(java版):和为s的两个数字题目1描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路见注释最开始满足条件的两个数就是乘积最小的! 因为left+right=s, z=left*right=left*(s-left), 可以看出z是开口向...原创 2019-07-02 23:58:43 · 246 阅读 · 0 评论 -
剑指offer面试题58(java版):翻转字符串
welcome to my blog剑指offer面试题57(java版):翻转字符串题目1描述: 翻转单词顺序牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I a...原创 2019-07-03 15:07:12 · 417 阅读 · 0 评论 -
剑指offer面试题牛客_二叉树_按之字形顺序打印二叉树(java版)
welcome to my blog剑指offer面试题牛客_二叉树_按之字形顺序打印二叉树(java版):题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路使用两个栈处理奇数层节点时, 先将其左孩子(如果有的话)压栈, 再将其右孩子(如果有的话)压栈处理偶数层节点时, 先将其...原创 2019-07-07 11:32:13 · 350 阅读 · 0 评论 -
剑指offer面试题牛客_二叉树_把二叉树打印成多行(java版)
welcome to my blog剑指offer面试题牛客_二叉树_把二叉树打印成多行(java版):题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路使用队列这个数据结构, 第一层节点总数是1先将根节点入队,然后将根节点出队,将根节点的左孩子入队,将根节点的右孩子入队,此时队列里只有第二层的两个节点将根节点的左孩子出队, 将根节点左孩子的左孩子入队, ...原创 2019-07-06 23:43:04 · 190 阅读 · 0 评论 -
剑指offer面试题牛客_字符串_字符流中第一个不重复的字符(java版)
welcome to my blog剑指offer面试题牛客_字符串_字符流中第一个不重复的字符(java版):题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。思路ascii码一共128个, 空格是第一个能输入的字符...原创 2019-07-06 22:58:05 · 350 阅读 · 0 评论 -
剑指offer面试题牛客_递归和循环_矩形覆盖(java版)
welcome to my blog剑指offer面试题牛客_递归和循环_矩形覆盖(java版):题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路动态规划中,推到递归式的时候,有个方法时:选或者不选, 其实更准确地说,从两个可能中选择一个, 选方法1还是选方法2具体到本题就是: 选竖着的...原创 2019-07-06 21:50:12 · 202 阅读 · 0 评论 -
剑指offer面试题牛客_递归和循环_变态跳台阶(java版)
welcome to my blog剑指offer面试题牛客_递归和循环_变态跳台阶(java版):题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路见注释使用f(n) = f(n-1)+f(n-2)+…+f(1)+f(0) 递归版 不推荐public class Solution { public...原创 2019-07-06 20:34:23 · 192 阅读 · 0 评论 -
剑指offer面试题牛客_递归和循环_跳台阶(java版)
welcome to my blog剑指offer面试题牛客_递归和循环_跳台阶(java版):题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路设f(n)表示跳上n阶台阶的跳法数量, 因为青蛙一次能跳一阶或者两阶, 所以f(n)和f(n-1),f(n-2)满足递归关系式: f(n) = f(n-1) + ...原创 2019-07-06 19:43:54 · 156 阅读 · 0 评论 -
剑指offer面试题67(java版):把字符串转成整数
welcome to my blog剑指offer面试题67(java版):把字符串转成整数思路见注释关键在于如何判断上溢和下溢public class Solution { public int StrToInt(String str) { /* 思路: x - '0' 要把特殊情况考虑全面:...原创 2019-07-06 14:23:55 · 586 阅读 · 0 评论 -
剑指offer面试题66(java版):构建乘积数组
welcome to my blog剑指offer面试题66(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可以用一个矩阵表示写一写可以发现B0 = D0, B1=C1D...原创 2019-07-06 11:00:16 · 195 阅读 · 0 评论 -
剑指offer面试题65(java版):不用加减乘除做加法
welcome to my blog剑指offer面试题65(java版):不用加减乘除做加法思路步骤1: 不进位相加步骤2: 计算进位值步骤3: 只要进位值不为0, 就重复步骤1和步骤2// 直到不进位相加就是结果之前(进位值为0之前), 要不断循环public class Solution { public int Add(int num1,int num2) { ...原创 2019-07-05 23:32:57 · 290 阅读 · 0 评论 -
剑指offer面试题64(java版):求1+2+...+n
welcome to my blog剑指offer面试题64(java版):求1+2+…+n利用指数,加法,移位注意移位操作只能用在整型数据类型上public class Solution { public int Sum_Solution(int n) { return (n+(int)Math.pow(n,2))>>1; //只能对整型进行移位操...原创 2019-07-05 22:03:30 · 512 阅读 · 1 评论 -
剑指offer面试题63(java版):股票的最大利润
welcome to my blog剑指offer面试题63(java版):股票的最大利润思路从头开始遍历, 记录遍历过程中的最小值, 同时计算并更新arr[i] - min的最大值感觉很简单, 其实还是要巩固自己的思路, 比如明确每次for循环在做什么: 计算卖出价为arr[i]时能够获得的最大利润public int MaxDiff(int[] arr){ //input...原创 2019-07-05 21:03:25 · 679 阅读 · 0 评论 -
剑指offer面试题62(java版):圆圈中最后剩下的数字
welcome to my blog剑指offer面试题62(java版):圆圈中最后剩下的数字思路找到要删除的索引(最麻烦的地方)通过取模运算更新索引的结果,考虑了已经删除的元素, 所以不能用删除对应元素public class Solution { public int LastRemaining_Solution(int n, int m) { ...原创 2019-07-05 20:25:39 · 1918 阅读 · 3 评论 -
剑指offer面试题61(java版):扑克牌中的顺子
welcome to my blog剑指offer面试题61(java版):扑克牌中的顺子题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他...原创 2019-07-05 12:13:09 · 630 阅读 · 0 评论 -
剑指offer面试题59(java版):队列的最大值
welcome to my blog剑指offer面试题59(java版):队列的最大值题目1描述: 滑动窗口的最大值给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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个: {...原创 2019-07-04 08:53:41 · 874 阅读 · 0 评论 -
剑指offer面试题29(java版):顺时针打印矩阵
welcome to my blog剑指offer面试题29(java版):顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.思路主要是要弄清楚打...原创 2019-06-12 08:52:59 · 232 阅读 · 0 评论 -
剑指offer面试题28(java版):对称的二叉树
welcome to my blog剑指offer面试题28(java版):对称的二叉树题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路自定义后序遍历:根右左在考虑叶子节点的left和right的情况下(也就是考虑null), 如果前序遍历和后序遍历的结果相同, 那么二叉树是对称的public class ...原创 2019-06-12 08:52:09 · 459 阅读 · 0 评论 -
剑指offer面试题8(java版):二叉树的下一个节点
welcome to my blog剑指offer面试题8(java版):二叉树的下一个节点题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针思路要弄清楚中序遍历具体思路见注释复杂度时间复杂度: 和数的深度有关空间复杂度: 没有分配额外的空间, O(1)/*public clas...原创 2019-06-10 16:47:56 · 119 阅读 · 0 评论 -
剑指offer面试题7(java版):重建二叉树
welcome to my blog剑指offer面试题7(java版):重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路画图思考不容易越界体会递归思想本题在递归中传递的参数...原创 2019-06-10 16:28:44 · 181 阅读 · 0 评论 -
剑指offer面试题6(java版):从尾到头打印链表
welcom to my blog面试题6:从尾到头打印链表题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList思路先进后出:栈结构, LinkedList可以实现栈数据结构稍微注意一下泛型问题复杂度时间复杂度:O(n)空间复杂度:O(n)import java.util.ArrayList;import java.util.LinkedList;pu...原创 2019-06-10 16:27:43 · 339 阅读 · 0 评论 -
剑指offer面试题5(java版):替换空格
welcome to my blog面试题5:替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路先明确需求.如果实在原来的字符串上进行替换,就有可能覆盖修改在该字符串后面的内存; 如果是创建新的字符串并在新的字符串上进行替换,那么就可以自己分配足够多的的内存...原创 2019-06-10 16:22:36 · 215 阅读 · 0 评论