剑指Offer
weixin_42956047
这个作者很懒,什么都没留下…
展开
-
【LeetCode-面试题】栈排序
面试题 03.05. 栈排序栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。参考class SortedStack { private Stack<Integer> stack; public SortedStack() { this.stack = new S原创 2020-06-01 22:32:52 · 295 阅读 · 0 评论 -
算法刷题套路+答题框架总结
BFS 算法框架套路详解双指针技巧总结滑动窗口解题套路总结二分查找解题套路框架回溯算法解题套路框架动态规划答疑篇动态规划解题套路框架摘自:推荐刷算法题必看+超级有用原创 2020-05-23 21:43:51 · 455 阅读 · 0 评论 -
【剑指Offer】不用加减乘除做加法
不用加减乘除做加法题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:位运算/*思路:位运算两个数异或:相当于每一位相加,而不考虑进位;两个数相与,并左移一位:相当于求得进位;将上述两步的结果相加*/public class Solution { public int Add(int num1,int num2) { while( num2 != 0 ){ int sum = num1 ^ num2原创 2020-05-19 13:54:51 · 66 阅读 · 0 评论 -
【剑指Offer】求1+2+3+...+n
求1+2+3+…+n题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。public class Solution { /* 解题思路: 1.需利用逻辑与的短路特性实现递归终止。 2.当n==0时,(n>0)&&((sum+=Sum_Solution(n-1))>0)只执行前面的判断,为false,然后直接返回0; 3.当n>0时,执行sum原创 2020-05-19 13:46:39 · 87 阅读 · 0 评论 -
【剑指Offer】孩子们的游戏(圆圈中最后剩下的数)
孩子们的游戏(圆圈中最后剩下的数)题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!原创 2020-05-19 13:29:47 · 103 阅读 · 0 评论 -
【剑指Offer】扑克牌顺子
扑克牌顺子题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育原创 2020-05-19 12:59:20 · 82 阅读 · 0 评论 -
【剑指Offer】翻转单词顺序列
翻转单词顺序列题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?参考/* 算法思想:先翻转整个句子,然后,依次翻转每个单词。 依据空格来确定单词的起始和终止位置*原创 2020-05-19 11:35:57 · 63 阅读 · 0 评论 -
【剑指Offer】左旋转字符串
左旋转字符串题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!方法一:直接拼接public class Solution { public String LeftRotateString(String str,int n) { i原创 2020-05-19 11:28:13 · 74 阅读 · 0 评论 -
【剑指Offer】和为S的两个数(有序数组)
和为S的两个数题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。参考import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { //左右夹逼原创 2020-05-19 11:07:55 · 108 阅读 · 0 评论 -
【剑指Offer】和为s的连续正数序列
和为s的连续正数序列题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列(等差数列)。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序解题思路:双指针+滑原创 2020-05-19 10:30:29 · 74 阅读 · 0 评论 -
【剑指Offer】数组中只出现一次的数
数组中只出现一次的数题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。方法一: 使用HashMap直接计数法暴力法:map保存数组元素的出现次数+遍历map方法二:使用HashSet判断元素是否重复一种简单的思路,可以想到用HashSet这种数据结构来存,重复的就立即剔除,剩下的就是不重复的两个数字,将其取出即可。链接:https://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d66原创 2020-05-19 10:03:51 · 66 阅读 · 0 评论 -
【剑指Offer】二叉平衡树(判断一棵二叉树是否是平衡二叉树)
二叉平衡树(判断一棵二叉树是否是平衡二叉树)题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树判断子树是否平衡+求左右子树高度public class Solution { // 如果从下往上遍历,如果子树是平衡二叉树,则返回子树的高度; // 如果发现子树不是平衡二叉树,则直接停止遍历,这样至多只对每个结点访问一次。 public boolean IsBalanced_Solution(TreeNode ro原创 2020-05-18 22:21:10 · 154 阅读 · 0 评论 -
【剑指Offer】数字在排序数组中出现的次数
数字在排序数组中出现的次数题目描述统计一个数字在排序数组中出现的次数。方法一:直接遍历,计数public class Solution { public int GetNumberOfK(int [] array , int k) { int count = 0; for(int i = 0; i < array.length; i++) { if(array[i] == k) { count++;原创 2020-05-18 21:37:30 · 75 阅读 · 0 评论 -
【剑指Offer】数组中的逆序对
数组中的逆序对题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size<=2*10^5示例1输入1,2,3,4,5,6,7,0输出7暴力法只能通原创 2020-05-18 21:13:58 · 149 阅读 · 0 评论 -
【剑指Offer】丑数
丑数题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如:6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。参考网友分析链接:https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b?f=discussion来源:牛客网链接:https://www.nowcoder.com/questionTerminal/6aa9e原创 2020-05-18 16:21:53 · 131 阅读 · 0 评论 -
【剑指Offer】把数组排成最小的数
把数组排成最小的数题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。参考1解题思路:先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。排序规则如下:若ab > ba 则 a > b,若ab < ba 则 a < b,若ab = ba 则 a = b;解释说明:原创 2020-05-18 14:48:28 · 64 阅读 · 0 评论 -
【剑指Offer】滑动窗口的最大值
滑动窗口的最大值题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,2,5],1},原创 2020-05-15 00:43:46 · 102 阅读 · 0 评论 -
【剑指Offer】最小的k个数(Min K)+ Top K
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。优先权队列实现求最小Kimport java.util.ArrayList;import java.util.PriorityQueue;import java.util.Queue;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] .原创 2020-05-14 16:59:02 · 108 阅读 · 0 评论 -
【剑指Offer】数组中出现次数超过一半的数字
数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。快排+遍历计数参考:https://blog.csdn.net/u013019701/article/details/80978224public class Solution {public int MoreThanHalfNum_Solution(i原创 2020-05-14 15:19:28 · 74 阅读 · 0 评论 -
【剑指Offer】字符串的排序(全排列,结果是否去重可以考虑用list还是set)
字符串的排序(全排列)题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列(全排列)。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。扩展:全排列根据题目要求看是否去重解题思路:递归+回溯思想①递归:也就是穷举,把所有情况都列举出来②回溯:在递归的过程中,回退的步骤import java.util.ArrayList;impor转载 2020-05-14 13:53:25 · 80 阅读 · 0 评论 -
【剑指Offer】二叉搜索树与双向链表(二叉搜索树转换为双向链表,本地实现)
二叉搜索树与双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。后序遍历+迭代+修改节点指针方法一:非递归版解题思路:1. 核心是中序遍历的非递归算法。2. 修改当前遍历节点与前一遍历节点的指针指向。3. 注意找双向链表头/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;原创 2020-05-09 22:52:08 · 92 阅读 · 0 评论 -
求二叉树两节点的LCA(最近公共祖先)(必须要会+常考)+求叶子节点到LCA的距离+求两个叶子节点之间的距离
两个节点分别在最近公共祖先的左、右子树上其中一个节点同时在最近公共祖先的左子树或者有子树上(当从根节点开始遍历到一个节点A等于这两个节点中的其中一个节点,A即为最近祖先节点)二叉树中任意两个节点的最近祖先节点(LCA):最近祖先节点就是从根节点遍历到给定节点时的最后一个相同节点。如上图,H和J的最低祖先节点是A。因为从根节点Root到H的链路为: Root A C H从根节点Root到J的链路为: Root A D J查看链路节点可知,A是最后一.原创 2020-05-09 01:16:12 · 676 阅读 · 0 评论 -
【剑指Offer+LeetCode-98】判断一颗满二叉树是否是二叉搜索树 + 验证二叉搜索树
【剑指Offer】判断一颗满二叉树是否是二叉搜索树题目描述给定一棵满二叉树,判定该树是否为二叉搜索树,是的话打印True,不是的话打印False说明:a. 二叉搜索树(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。b. 满二叉树,除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树c原创 2020-05-09 19:34:13 · 561 阅读 · 0 评论 -
【剑指Offer】二叉树中和为某一值的路径
二叉树中和为某一值的路径题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。参考import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {原创 2020-05-09 17:46:04 · 61 阅读 · 0 评论 -
【剑指Offer】二叉搜索树的后序遍历序列(判断二叉排序树的后序遍历序列合法性)
二叉搜索树的后序遍历序列(判断二叉排序树的后序遍历序列合法性)题目描述输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。public class Solution { //二叉搜索树(即二叉查找树(Binary Search Tree)或 二叉排序树) public boolean VerifySquenceOfBST(int [] sequence) { //二叉搜索树为空原创 2020-05-09 17:06:38 · 187 阅读 · 0 评论 -
【剑指Offer】从上往下打印二叉树
从上往下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路考点:二叉树的层次遍历方法:队列 + 层次遍历import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;原创 2020-05-09 16:03:41 · 63 阅读 · 0 评论 -
【剑指Offer】栈的压入、弹出序列(判断栈的出栈序列是否合法)
栈的压入、弹出序列(判断栈的出栈序列是否合法)题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路链接:https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb3原创 2020-05-09 15:39:15 · 136 阅读 · 0 评论 -
【剑指Offer】二叉树的高度(深度)
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。方法一:递归法public class Solution { public int TreeDepth(TreeNode root) { if(root == null) { return 0; } return Math.max(TreeDepth(root.left), Tr原创 2020-05-09 00:00:31 · 136 阅读 · 0 评论 -
【剑指Offer】中缀表达式转换为后缀表达式
中缀表达式转换为后缀表达式题目描述将中缀表达式转为后缀表达式,输入 a+bc/d-a+f/b 输出 abcd/+a-fb/+要求:语言不限;输入输出均为单个字符串;操作数用单个小写字母表示,操作符只需支持 ±*/,按照四则运算顺序确定优先级,不包含括号输入描述:一个字符串为合法的中缀表达式字符串长度不超过200000输出描述:对应的后缀表达式示例1输入a+b*c/d-a+f/b输出abc*d/+a-fb参考思路import java.util.HashMap;import j原创 2020-05-08 23:20:47 · 151 阅读 · 0 评论 -
【剑指Offer】获取n维数组的最大深度
获取n维数组的最大深度题目描述输入参数为字符串型的n维数组,数组的每一项值为数组 或 int型数字。请实现一个函数,可以获取列表嵌套列表的最大深度为多少。输入描述:输入参数为字符串型的 n维数组,列表的每一项值为数组 或 int型数字。数组内的数组,每一项值,也可以是数组 或 int型数字。输出描述:int型数字,表示数组嵌套的深度。示例1复制[[1], [2,3,4], [5,[2,3]], [7], [0,[1,2,3,4],3,5], [1,3], [3,2,4]]输出3说明原创 2020-05-08 22:08:20 · 237 阅读 · 0 评论 -
【剑指Offer】包含min函数的栈(求当前栈中最小元素值)
包含min函数的栈(求当前栈中最小元素值)题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。解题思路:import java.util.Stack;public class Solution { //方法一:两个栈,stack存放栈元素,一个存放最小元素 //存放当前栈中元素的最小值(即curMinStack的栈顶元素),最小栈深原创 2020-05-08 20:53:48 · 85 阅读 · 0 评论 -
【剑指Offer】顺时针打印矩阵
顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.解题思路import java.util.ArrayList;public class Solut...原创 2020-05-05 18:17:52 · 87 阅读 · 1 评论 -
【剑指Offer】二叉树的镜像
二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:思路先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子节点,当交换完所有的非叶子结点的左右子结点之后,就得到了树的镜像public class Solution { public void Mirror(TreeNode root) { if(root == null...原创 2020-05-05 17:09:07 · 95 阅读 · 1 评论 -
【剑指Offer】树的子结构
树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路https://www.nowcoder.com/questionTerminal/6e196c44c7004d15b1610b9afca8bd88?f=discussion1、首先设置标志位result = false,因为一旦匹配成功result就设为true,剩下的代码...原创 2020-05-05 16:58:20 · 92 阅读 · 1 评论 -
【剑指Offer】矩阵中的路径:用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进...原创 2020-04-09 14:32:57 · 450 阅读 · 0 评论 -
【剑指Offer】二叉树的下一个结点
二叉树的下一个结点题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解析分析二叉树的下一个节点,一共有以下情况:二叉树为空,则返回空;节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点,该叶子节点即为下一个节点;节点不是根节点。如果该节点是其父节点的...原创 2020-04-07 15:33:06 · 64 阅读 · 0 评论 -
【剑指Offer】链表中倒数第k个结点
【剑指Offer】链表中倒数第k个结点题目描述输入一个链表,输出该链表中倒数第k个结点。快慢指针法,注意while循环条件是判断快指针的下一个结点是否为null/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; ...原创 2020-04-04 17:54:26 · 161 阅读 · 0 评论 -
[剑指Offer]数值的整数次幂
剑指Offer——数值的整数次幂题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。解法一:直接法注意的问题:1、 关于次幂的问题特殊的情况,比如次幂为负数,或者基数为0时等等复杂的情况。(由于指数是int 类型,所以要区分整数还是负数或者0.)2 、机器中浮点数的比较是由误差...原创 2020-04-04 15:18:11 · 122 阅读 · 0 评论 -
【剑指Offer】二进制中1的个数
二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析链接:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8?f=discussion来源:牛客网绝对最佳答案及分析:public class Solution { public int Nu...原创 2020-03-31 23:36:02 · 70 阅读 · 0 评论 -
【剑指Offer】矩阵覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:算法分析分析一:public class Solution { public int RectCover(int target) { if(target <= 0){ ret...原创 2020-03-31 23:22:08 · 103 阅读 · 0 评论