
剑指offer
DJames23
这个作者很懒,什么都没留下…
展开
-
【剑指Offer】面试题54:二叉搜索树的第k大节点
import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * 面试题54:二叉搜索树的第K大节点 * 题目:给定一棵二叉搜索树,请找出其中第k大的节点。 * @author * @create 2021-05-06 18:32 */public class Solution54 { public static void main(String[] args) { Tree原创 2021-05-06 20:57:44 · 161 阅读 · 0 评论 -
【剑指Offer】面试题68:树中两个节点的最低公共祖先
import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;/** * 面试题68:树中两个节点的最低公共祖先。leetcode Hot100 236题,中等 * 题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 * 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q, * 最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先.原创 2021-05-06 18:30:30 · 150 阅读 · 1 评论 -
【剑指Offer】面试题37:序列化二叉树
/** * 面试题37:序列化二叉树 * 题目:请实现两个函数,分别用来序列化和反序列化二叉树 * 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串, * 从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改, * 序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。 * * 二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树原创 2021-05-04 21:41:27 · 143 阅读 · 0 评论 -
【剑指Offer】面试题36:二叉搜索树与双向链表
参考博客:https://blog.youkuaiyun.com/u013132035/article/details/80638812import java.util.Stack;/** * 面试题36:二叉搜索树与双向链表 * 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的 * 指向。 * @author * @create 2021-05-04 16:45 */public class Solution36 { pu原创 2021-05-04 20:54:40 · 136 阅读 · 0 评论 -
【剑指Offer】面试题67:把字符串转换成整数
import org.omg.CORBA.INTERNAL;/** * 面试题67:把字符串转换成整数 * 题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 * 输入:"+2147483647" * 输出:2147483647 * * 输入:"1a33" * 输出:0 * * @author * @create 2021-05-03 22:39 */public class Solution67 { pu原创 2021-05-04 16:42:43 · 234 阅读 · 0 评论 -
【剑指Offer】面试题13:机器人的运动范围
/** * 面试题13:机器人的运动范围 * 题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动, * 每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 * 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。 * 但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? * * 输入:5,10,10。说明:10行10列,k=5 * 返回值:21 *原创 2021-05-03 22:32:09 · 148 阅读 · 0 评论 -
【剑指Offer】面试题35:复杂链表的复制
import java.util.HashMap;/** * 面试题35:复杂链表的复制 * 题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点, * 另一个特殊指针random指向一个随机节点), * 请对此链表进行深拷贝,并返回拷贝后的头结点。 * (注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) * * @author * @create 2021-05-03 15:14 */public class Solution35 {原创 2021-05-03 21:01:31 · 111 阅读 · 0 评论 -
【剑指Offer】面试题29:顺时针打印矩阵
import java.util.ArrayList;/**\ * 面试题29:顺时针打印矩阵 * 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下矩阵: * 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 * @author * @create 2021-05-03 12:26 */pub原创 2021-05-03 15:10:17 · 141 阅读 · 0 评论 -
【剑指Offer】面试题8:二叉树的下一个节点
import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * 面试题8:二叉树的下一个节点 * 题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。 * 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 * @author * @create 2021-03-11 23:16 */public class Solution8 { public s原创 2021-05-03 12:23:45 · 162 阅读 · 0 评论 -
【剑指Offer】面试题28:对称的二叉树
import java.util.LinkedList;import java.util.Queue;/** * 面试题28:对称的二叉树 * 题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 * @author * @create 2021-05-02 22:25 */public class Solution28 { public static void main(String[] args) { TreeNo原创 2021-05-02 23:10:01 · 125 阅读 · 0 评论 -
【剑指Offer】面试题27:二叉树的镜像
二叉树的遍历:参考博客:https://blog.youkuaiyun.com/weixin_44404255/article/details/104517916https://blog.youkuaiyun.com/qq_44932835/article/details/104948804class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}im原创 2021-04-27 09:50:17 · 130 阅读 · 0 评论 -
【剑指Offer】面试题26:树的子结构
/** * 面试题26:树的子结构 * 题目:输入两棵二叉树A和B,判断B是不是A的子结构。 * @author * @create 2021-04-22 12:16 */public class Solution26 { public static void main(String[] args) { TreeNode root1 = new TreeNode(8); TreeNode node1 = new TreeNode(8); T原创 2021-04-22 23:04:55 · 150 阅读 · 0 评论 -
【剑指Offer】面试题31:栈的压入、弹出序列
import java.util.Stack;/** * 面试题31:栈的压入弹出序列 * 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 * 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序, * 序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 * (注意:这两个序列的长度是相等的) * * 输入:[1,2,3,4,5],[4,3,5,1,2] * 输出:fal原创 2021-04-20 23:47:25 · 153 阅读 · 0 评论 -
【剑指Offer】面试题30:包含min函数的栈
import java.util.Stack;/** * 面试题30:包含min函数的栈 * 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 * @author dengjie * @create 2021-04-20 22:00 */public class Solutin30 { public static void main(String[] args) { } static Stack<I原创 2021-04-20 22:25:48 · 152 阅读 · 0 评论 -
面试题44:数字序列中某一位的数字
/** * 面试题44:数字序列中某一位的数字 * @author * @create 2021-04-20 18:39 */public class Solution44 { public static void main(String[] args) { int midNum = findMidNum(190);//1001,370的第1个数字7 System.out.println(midNum); } /** * 方法一:原创 2021-04-20 21:59:15 · 120 阅读 · 0 评论 -
【剑指Offer】面试题60:n个骰子的点数
import org.junit.Test;/** * 面试题60:n个骰子的点数 * 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为 s,输n,打印出 s 的所有可能的值出现的概率。 * * @author * @create 2021-04-19 21:53 */public class Solution60 { public static void main(String[] args) { PrintProbability(5); }原创 2021-04-20 18:10:42 · 142 阅读 · 0 评论 -
【剑指Offer】题目分类
1.数组面试题3:数组中重复的数字面试题4:二维数组中的查找面试题21:调整数组顺序使奇数位于偶数前面面试题39:数组中出现次数超过一半的数字面试题40:最小的k个数面试题45:把数组排成最小的数面试题57:和为s的数字面试题61:扑克牌中的顺子面试题63:股票的最大利润面试题66:构建乘积数组2.字符串面试题5:替换空格面试题17:打印从1到最大的n位数面试题20:表示数值的字符串面试题38:字符串的排列面试题50:第一个只出现一次的字符面试题58:反转字符串面试题67原创 2021-04-20 17:34:41 · 259 阅读 · 0 评论 -
【剑指Offer】面试题17:打印从1到最大的n位数
参考博客:https://blog.youkuaiyun.com/u013132035/article/details/80563507/** * 面试题17:打印从1到最大的n位数 * 题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999. * @author * @create 2021-04-20 11:01 */public class Solution17 { public static void main(String[] ar原创 2021-04-20 15:11:36 · 155 阅读 · 0 评论 -
【剑指Offer】面试题49:丑数
/** * 面试题49:丑数 * 把只包含质因子2、3和5的数称作丑数(Ugly Number)。 * 例如6、8都是丑数,但14不是,因为它包含质因子7。 * 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 * 输入:7 * 输出:8 * @author * @create 2021-04-19 19:28 */public class Solution49 { public static void main(String[] args) {原创 2021-04-19 21:50:34 · 159 阅读 · 0 评论 -
【剑指Offer】面试题48:最长不含重复字符的子字符串
参考博客:https://blog.youkuaiyun.com/weixin_38361153/article/details/88925999import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 面试题48:最长不含重复字符的子字符串 * 题目:青葱字符串中找出一个最长的不包含重复字符的子字符串,计算该最长字符串的长度。 * 假设字符串中只包含'a'~'z'的字符。例如,在字符串"arabcac原创 2021-04-19 19:27:53 · 159 阅读 · 0 评论 -
【剑指Offer】面试题47:礼物的最大价值
/** * 面试题47:礼物的最大价值 * 在一个 m*n 的棋盘中的每一个格都放一个礼物,每个礼物都有一定的价值(价值大于0). * 你可以从棋盘的左上角开始拿各种里的礼物,并每次向左或者向下移动一格, * 直到到达棋盘的右下角。给定一个棋盘及上面个的礼物,请计算你最多能拿走多少价值的礼物? * [1, 10, 3, 8] * [12, 2, 9, 6] * [5, 7, 4, 11] * [3, 7, 16, 5] * 例如:在上面的棋牌中,如果沿着(1,12,5,7,7,16,5)路原创 2021-04-19 11:06:14 · 165 阅读 · 0 评论 -
【剑指Offer】面试题46:把数字翻译成字符串
import java.util.ArrayList;/** * 面试题46:把数字翻译成字符串 * 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……, * 11 翻译成 “l”,……,25 翻译成 “z”。 * 一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 * * 示例 1: * 输入: 12258 * 输出: 5 * 解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "b原创 2021-04-18 22:31:34 · 189 阅读 · 0 评论 -
【剑指Offer】面试题63:股票的最大利润
/** * 面试题63:股票的最大利润 * 题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖股票一次可能获得的最大利润是多少? * 例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}.如果我们能在价格为5的时候买入 * 并在价格为16的时候卖出,则能收获最大的利润11. * 输入{9,11,8,5,7,12,16,14} * 输出:11 * @author * @create 2021-04-18 15:34 */public class Sol原创 2021-04-18 17:24:31 · 171 阅读 · 0 评论 -
【剑指Offer】面试题62:圆圈中组后剩下的数字
import java.util.ArrayList;import java.util.List;/** * 面试题62:圆圈中最后剩下的数字 约瑟夫(Josephuse)环问题 * 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。 * HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的: * 首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。 * 每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的原创 2021-04-18 15:34:13 · 136 阅读 · 0 评论 -
【剑指Offer】面试题66:构建乘积数组
import java.util.Arrays;/** * 面试题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]。 * 不能使用除法。 * (注意:规定 * B[0] = A[1] * A[2] * ... * A[n-1], * B[n-1] = A[0] * A[1] * ... * A[n-2];) * 对于A长度原创 2021-04-17 22:44:50 · 176 阅读 · 0 评论 -
【剑指OfferOffer】面试题38:字符串的排列
import java.util.ArrayList;import java.util.Arrays;/** * 面试题38:字符串的排列 * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 * 例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 * 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 * 输入:"ab" * 输出:["ab","ba"] * @author原创 2021-04-17 21:08:18 · 132 阅读 · 0 评论 -
【剑指Offer】面试题19:正则表达式匹配
/** * 面试题19:正则表达式匹配 * 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符, * 而'*'表示它前面的字符可以出现任意次(包含0次)。 * 在本题中,匹配是指字符串的所有字符匹配整个模式。 * 例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。 * * 输入:"aaa","a*a" * 输出:true * @author * @create 2021-04-15 17:03原创 2021-04-17 12:26:51 · 194 阅读 · 0 评论 -
【剑指Offer】面试题20:表示数值的字符串
/** * 面试题20:表示数值的字符串 * 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 * 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 * 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 * 输入:"123.45e+6" * 输出:true * @author * @create 2021-04-15 14:44 */public class Solution20 {原创 2021-04-15 16:24:20 · 170 阅读 · 0 评论 -
【剑指Offer】面试题65:不用加减乘除做加法
/** * 面试题65:不用加减乘除做加法 * 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 * @author * @create 2021-04-14 10:55 */public class Solution65 { public static void main(String[] args) { int sum = add(5, 7); System.out.println(sum); } /**原创 2021-04-14 11:07:06 · 458 阅读 · 0 评论 -
【剑指Offer】面试题21:调整数组顺序使奇数位于偶数前面
import java.util.ArrayList;import java.util.Arrays;/** * 面试题21:调整数组顺序使奇数位于偶数前面 * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分, * 所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 * * 输入:[1,2,3,4] * 输出:[1,3,2,4] * * @author dengjie * @create 2021-04-13 23原创 2021-04-14 00:30:51 · 135 阅读 · 0 评论 -
【剑指Offer】面试题61:扑克牌中的顺子
import java.util.Arrays;import java.util.HashSet;import java.util.Set;import java.util.TreeSet;/** * 面试题61:扑克牌中的顺子 * LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)... * 他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!! * “红心A,黑桃3,小王,大王,方片原创 2021-04-13 22:38:56 · 161 阅读 · 0 评论 -
【剑指Offer】面试题64:求1+2+...+n
/** * 面试题64:求1+2+3+...+n * 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 * @author * @create 2021-04-13 19:55 */public class Solution64 { public static void main(String[] args) { int i = sumN(10); System.原创 2021-04-13 21:42:45 · 161 阅读 · 0 评论 -
【剑指Offer】面试题58:翻转字符串
import org.junit.Test;import java.util.Stack;/** * 面试题58:翻转字符串 * 题目一:翻转单词顺序 * 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。 * 例如:输入字符串:“I am a teacher.”,则输出"teacher. a am I". * @author * @create 2021-04-13 15:30 */public class Solution58原创 2021-04-13 16:55:14 · 157 阅读 · 0 评论 -
【剑指Offer】面试题57:和为s的数字
import org.junit.Test;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;/** * 题目一:和为s的数字 * 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, * 如果有多对数字的和等于S,输出两个数的乘积最小的。 * @author * @create 2021-04-13 12:28 */public class Solut原创 2021-04-13 15:29:33 · 115 阅读 · 0 评论 -
【剑指Offer】面试题51:数组中的逆序对
import netscape.security.UserTarget;/** * 面试题51:数组中的逆序对 * 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。 * 输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 * 输入:[1,2,3,4,5,6,7,0] * 输出:7 * @author * @create 2021-04-07 23:14 */public class原创 2021-04-08 21:53:34 · 162 阅读 · 0 评论 -
【剑指Offer】面试题53:在排序数组中查找数字
题目一import java.util.Arrays;import java.util.HashMap;/** * 面试题53:在排序数组中查找数字 * 题目一:统计一个数字在升序数组中出现的次数。 * 输入:[1,2,3,3,3,3,4,5],3 * 输出:4 * @author * @create 2021-04-07 18:04 */public class Solution53_1 { public static void main(String[] args) {原创 2021-04-07 22:40:50 · 295 阅读 · 0 评论 -
【剑指Offer】面试题56:数组中数字出现的次数
import java.util.Arrays;import java.util.HashSet;import java.util.Iterator;import java.util.Scanner;/** * 面试题56 * 题目一:数组中只出现一次的两个数字 * 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 * 输入:[1,4,1,6] * 输出:[4,6] * @author * @create 2021-04-07 14:51原创 2021-04-07 15:41:22 · 111 阅读 · 0 评论 -
【剑指Offer】面试题45:把数组排成最小的数
/** * 面试题45:把数组排成最小的数 * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 * @author * @create 2021-04-07 11:13 */public class Solution45 { public static void main(String[] args) { int[] numbers =原创 2021-04-07 14:42:53 · 119 阅读 · 0 评论 -
【剑指Offer】面试题43:1~n整数中1出现的次数
/** * 面试题43:1~n整数中1出现的次数 * 题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? * 为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。 * ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 * @author * @create 2021-04-06 22:21 */public class S原创 2021-04-07 00:04:40 · 134 阅读 · 1 评论 -
【剑指Offer】面试题42:连续子数组的最大和
/** *面试题42:连续子数组的最大和 * 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成 * 一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n). * @author * @create 2021-04-01 19:38 */public class Solution42 { public static void main(String[] args) { int[] arr = {1,-2,3,10,-4,7,2,-5};原创 2021-04-01 20:28:11 · 111 阅读 · 0 评论