自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 剑指offer

剑指offer47、求1+2+3+...+n涉及的知识点题目描述解题思路一代码解题思路二代码涉及的知识点数学知识题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。输入:5返回值:15解题思路一直接求和代码public class Solution { public int Sum_Solution(int n) { return n*(n+1)/2;}解题思路二

2021-06-01 11:25:53 114

原创 剑指offer

剑指offer40、数组中只出现一次的两个数字涉及的知识点题目描述解题思路一代码解题思路二代码涉及的知识点哈希,位运算题目描述一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入:[1,4,1,6]返回值:[4,6]解题思路一利用hashmap来存储。代码import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法

2021-06-01 11:18:51 105

原创 剑指offer

剑指offer26、二叉搜索树与双向链表涉及的知识点题目描述解题思路代码涉及的知识点链表,二叉树题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路中序遍历二叉树,然后建立前后关系。代码/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNo

2021-06-01 10:32:03 112

原创 剑指offer

剑指offer25、复杂链表的复制涉及的知识点题目描述解题思路代码涉及的知识点链表题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路说实话,初读题目,我连题目表达的意思都没看懂。参考牛客网答题第一chancy的思路代码/*public class RandomListNode { i

2021-05-31 11:35:00 92

原创 剑指offer

剑指offer24、二叉树中和为某一值的路径涉及的知识点题目描述解题思路代码涉及的知识点二叉树,DFS题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。输入:{10,5,12,4,7},22输出:[[10,5,7],[10,12]]解题思路这题我是参考大佬思路,我是没思考出来。代码import java.util.ArrayList;/**public class

2021-05-31 11:01:11 83

原创 剑指offer

剑指offer23、二叉搜索树的后序遍历序列涉及的知识点题目描述解题思路代码涉及的知识点二叉搜索树,后序遍历题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)输入:[4,8,6,12,16,14,10]输出:true解题思路BST特性:左孩子<根节点<右孩子,左右孩子都是BST.因为每一颗BST的后序遍历的最后一个树总是根节点。所以

2021-05-27 11:13:06 75

原创 剑指offer

剑指offer22、从上到下打印二叉树涉及的知识点题目描述解题思路代码涉及的知识点二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。输入:{5,4,#,3,#,2,#,1}输出:[5,4,3,2,1]解题思路这题不难,采用一个队列,用于存放访问过但是有子节点的节点。代码import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;/**public class

2021-05-27 10:21:25 77

原创 剑指offer

剑指offer17、树的子结构涉及的知识点题目描述解题思路代码涉及的知识点二叉树题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)输入:{8,8,#,9,#,2,#,5},{8,9,#,2}输出:true解题思路1、找到大树和小树根节点相同的节点2、以此节点为根节点,在大树上往下搜索对比小树的左右节点是否相同,不同返回false3、如果上一步返回false,继续找大树的左子树和小树跟节点相同的节点。4、如果上一步返回false,继

2021-05-24 17:20:34 71

原创 剑指offer

剑指offer3、替换空格涉及的知识点题目描述解题思路代码涉及的知识点位运算题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:“We Are Happy”输出:“We%20Are%20Happy”解题思路重新申请一个空间代码import java.util.*;public class Solution { /** * 代码中的类名、方

2021-05-24 11:08:22 73

原创 剑指offer

剑指offer21、栈的压入弹出序列涉及的知识点题目描述解题思路代码涉及的知识点栈题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例1输入:[1,2,3,4,5],[4,3,5,1,2]输出:false解题思路经典的栈问题

2021-05-21 18:00:15 88

原创 剑指offer

剑指offer12、数值的整数次方涉及的知识点题目描述解题思路代码解题思路代码涉及的知识点数学题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。输入:2.00000,3输出:8.00000解题思路底数的指数次方相当于指数个底数(或底数倒数)相乘时间复杂度O(n),空间复杂度O(1)①:特殊情况一:底数

2021-05-21 17:25:37 124

原创 剑指offer

剑指offer11、二进制中1的个数涉及的知识点题目描述解题思路代码解题思路(牛客大神)代码涉及的知识点位运算题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。输入:10输出:2解题思路两个问题:1、十进制如何转化为二进制2、转化成的二进制如何统计1的个数。使用&符,直接将整数看做二进制,与1进行位运算来判断最低位是否为1,然后右移一位,继续判断。代码public class Solution { public int Numbe

2021-05-21 16:01:52 73

原创 剑指offer

剑指offer4、重建二叉树涉及的知识点题目描述解题思路代码涉及的知识点二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。输入:[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]输出:{1,2,5,3,4,6,7}解题思路二叉树的前序遍历中序遍历都是说的是根节点的位置,所以在

2021-05-21 10:39:27 70

原创 剑指offer

剑指offer30、连续子数组的最大和涉及的知识点题目描述解题思路(大佬的思路-Keagan.W牛客)代码涉及的知识点动态规划题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).输入:[1,-2,3,10,-4,7,2,-5]输出:18解题思路(大佬的思路-Keagan.W牛客)简单的规划的习题,状态只需要跟前一个状态有关系,不需要dp Table直接变量存储,时间复杂度O(n),空间复杂度

2021-05-21 09:44:41 70

原创 剑指offer

剑指offer45、扑克牌顺子涉及的知识点题目描述解题思路代码涉及的知识点模拟题目描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:A为1,J为11,Q为12,K为13,A不能视为14大、小王为 0,0可以看作任意牌如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。例如:给出数据[6,0,2,0,4]中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]这样这五张牌在[2,6]区间连续,输出true

2021-05-20 17:30:08 65

原创 剑指offer

剑指offer62、二叉搜索树的第k个节点涉及的知识点题目描述解题思路代码涉及的知识点中序遍历题目描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。输入:{5,3,7,2,4,6,8},3输出:{4}解题思路二叉搜索树的中序遍历就是从小到大排列,所以先进行中序遍历二叉树,然后再取出第k小的数代码/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode rig

2021-05-20 16:50:33 67

原创 剑指offer

剑指offer39、平衡二叉树涉及的知识点题目描述解题思路代码涉及的知识点递归题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。输入:{1,2,3,4,5,6,7}输出:true解题思路借助于上一题的计算树的深度,然后算左右子树的差值。代码impor

2021-05-20 11:45:56 65

原创 剑指offer

剑指offer34、第一个只出现一次的字符涉及的知识点题目描述解题思路代码涉及的知识点哈希题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。输入:{1,2,3,4,5,#,6,#,#,7}输出:4解题思路采用递归的方法,分别计算左右子树的深度。代码/**public class TreeNode { int val = 0; TreeNode left = null; Tr

2021-05-20 11:11:31 73

原创 剑指offer

剑指offer34、第一个只出现一次的字符涉及的知识点题目描述解题思路代码涉及的知识点哈希题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)输入:“google”输出:4解题思路利用哈希来存储字符和字数代码import java.util.*;public class Solution { public int FirstNotRe

2021-05-20 10:31:00 64

原创 剑指offer

剑指offer48、不用加减乘除做加法涉及的知识点题目描述解题思路代码涉及的知识点数学,计算机组成原理题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入:1,2输出:3解题思路在计组中,半加器、全加器中:两个二进制的相加结果是用一个异或门实现的;两个二进制的进位结果是用一个与门来实现的。代码public class Solution { public int Add(int num1,int num2) {

2021-05-19 19:08:11 69

原创 剑指offer

剑指offer29、二叉树的镜像涉及的知识点题目描述解题思路代码涉及的知识点二叉树题目描述操作给定的二叉树,将其变换为源二叉树的镜像。比如: 源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5输入:{8,6,10,5,7,9,11}输出:{8,10,6,11,9,7,5}解题思路采用递归的方法代码import java.util.*;/* * public class

2021-05-19 18:56:06 35

原创 剑指offer

剑指offer29、最小的k个数涉及的知识点题目描述解题思路代码复杂度涉及的知识点栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数。在该栈中,调用 min、push 及 pop 函数的时间复杂度都是 O(1).push(value):将元素 value压入栈中pop():弹出栈顶的元素top() :获得栈顶元素min() :获得栈中的最小元素。示例:输入:[“PSH-1”,“PSH2”,“MIN”,“TOP”,“POP”,“PSH1”,“TOP”,“

2021-05-19 18:44:33 41

原创 剑指offer

剑指offer29、最小的k个数涉及的知识点题目描述解题思路代码复杂度涉及的知识点链表题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组输入:[4,5,1,6,2,7,3,8],4输出:[1,2,3,4]解题思路先对数组进行排序,然后输出前k个数代码import java.util.ArrayList;import java.util.Array

2021-05-19 18:24:18 54

原创 剑指offer

剑指offer16、合并两个排序的链表涉及的知识点题目描述解题思路代码复杂度解题思路代码复杂度涉及的知识点链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。输入:{1,3,5},{2,4,6}输出:{1,2,3,4,5,6}解题思路采用递归,无非就是头结点加上剩余链表。首先比较两个谁小,谁小谁当头节点代码public class Solution { public ListNode Merge(ListNode l

2021-05-19 17:46:18 72

原创 剑指offer

剑指offer55、链表中环的入口节点涉及的知识点题目描述解题思路代码复杂度解题思路二代码复杂度涉及的知识点链表题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解题思路这其实是经典的快慢指针的问题,快指针走两步,慢指针走一步,如果相遇则是有环。接着快指针回到链表头。快慢指针一起走一步,相遇点则是环的入口节点。代码public class Solution { public ListNode EntryNodeOfLoop(ListNode pHea

2021-05-19 16:07:24 48

原创 剑指offer

剑指offer56、删除链表中重复的节点涉及的知识点题目描述解题思路代码复杂度涉及的知识点链表题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5输入:{1,2,3,3,4,4,5}输出:{1,2,5}解题思路直接删除,创建一个头结点指向链表,然后使用快慢指针,快指针用于遍历链表找出重复的节点,慢指针用于删

2021-05-19 15:28:08 58

原创 剑指offer

剑指offer15、反转链表涉及的知识点题目描述解题思路代码复杂度解题思路二(牛客-伊万夫斯基)代码复杂度涉及的知识点链表题目描述输入一个链表,反转链表后,输出新链表的表头。输入:{1,2,3}输出:{3,2,1}解题思路老生常谈的思路,反转就想到栈代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val;

2021-05-19 14:49:40 44

原创 剑指offer

剑指offer14、链表中倒数第k个节点涉及的知识点题目描述解题思路一代码复杂度解题思路二代码涉及的知识点链表题目描述输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空输入:{1,2,3,4,5},1输出:{5}解题思路一比较笨的方法,既然是倒数我能不能把它弄成输出正数第链表长度-k个节点。所以首先遍历链表得出链表长度,然后计算是链表中第k个,然后输出。代码public class Solution { /** * 代码中的类名、方法

2021-05-19 13:24:34 48

原创 剑指offer

剑指offer3、从尾到头打印链表涉及的知识点题目描述解题思路代码复杂度解题思路二代码复杂度解题思路三代码复杂度涉及的知识点链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。输入:{67,0,24,58}输出:[58,24,0,67]解题思路从头到尾遍历链表,然后插入到数组中,注意这里因为是输出从尾到头的顺序,所以我们采用头插法,不用尾插法。代码import java.util.ArrayList;public class Solution {

2021-05-19 12:44:59 100

原创 剑指offer

剑指offer10、青蛙跳台阶涉及的知识点题目描述解题思路代码涉及的知识点递归题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,从同一个方向看总共有多少种不同的方法?比如n=3时,2*3的矩形块有3种不同的覆盖方法(从同一个方向看):解题思路和第八题一样。当有一级台阶时: f(1)=1当有两级台阶时: f(2)=2当有三级台阶时: f(3)=3当有四级台阶时: f(4)=5…归纳得:f(n)=f(n-1)+f(n-2)

2021-05-18 18:58:03 40

原创 剑指offer

剑指offer 8、青蛙跳台阶涉及的知识点题目描述解题思路代码涉及的知识点递归题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路当有一级台阶时: f(1)=1当有两级台阶时: f(2)=2当有三级台阶时: f(3)=3当有四级台阶时: f(4)=5…归纳得:f(n)=f(n-1)+f(n-2)代码public class Solution { public int jumpFloor(int

2021-05-18 18:50:13 48

原创 剑指offer

剑指offer 36、两个链表的第一个公共节点涉及的知识点题目描述解题思路一解题思路二代码复杂度解题思路三代码复杂度解题思路四(大佬的想法,很妙)代码复杂度涉及的知识点链表题目描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)输入:解题思路一暴力解法,两个指针,一个遍历第一个链表,一个遍历另一个链表。如果在第二个链表上有一个结点和第一个链表上的结点一样,说明两个链表在这个结点上重合,于是就找到了它们的公

2021-05-18 18:38:38 57

原创 剑指offer

剑指offer 9、变态跳台阶涉及的知识点题目描述解题思路代码涉及的知识点贪心题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。输入:3输出4解题思路当有一级台阶时: f(1)=1当有两级台阶时: f(2)=2当有三级台阶时: f(3)=4当有四级台阶时: f(4)=8…归纳得:f(n)=2f(n-1)代码public class Solution { public int jumpFloo

2021-05-17 15:17:04 63

原创 剑指offer

剑指offer 6、旋转数组的最小数字涉及的知识点题目描述解题思路代码复杂度涉及的知识点数组,二分题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。输入:[3,4,5,1,2]输出:1解题思路这是二分查找的变形,没有target值进行比较,于是我们需要找target。那么边界就是我们最好的target。代码import java.

2021-05-17 15:05:01 52

原创 剑指offer

剑指offer 5、两个栈实现队列涉及的知识点题目描述解题思路代码涉及的知识点栈和队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路栈:先进后出队列:先进先出栈实现队列,压栈时队列和栈没什么区别。主要是出栈。想法是将栈1专门用来入,当需要出站时就将栈1的数弹出压入栈2中,再取栈2 的数代码import java.util.Stack;public class Solution { Stack<Integer>

2021-05-17 13:53:59 54

原创 剑指offer

剑指offer 52、构建乘积数组涉及的知识点题目描述解题思路代码复杂度分析涉及的知识点数组题目描述给定一个数组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无意义,故而无法构建,因此该情况不会存在。输入:

2021-05-17 13:31:55 73

原创 剑指offer

剑指offer 50、数组中重复的数涉及的知识点题目描述解题思路一代码复杂度分析解题思路二代码复杂度分析解题思路三代码复杂度分析涉及的知识点数组题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1输入:[2,3,1,0,2,5,3]返回值2解题思

2021-05-17 12:24:18 123

原创 剑指offer

剑指offer 19、顺时针打印矩阵涉及的知识点题目描述解题思路代码复杂度分析涉及的知识点数组题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.输入:[[1,2],[3,4]]返回值[1,2,4,3]解题思路画出图解,借用牛客网的图,第一步打印第一行,第二

2021-05-17 10:34:04 49

原创 剑指offer

剑指offer 42、和为S的两个数字涉及的知识点题目描述解题思路一代码复杂度分析解题思路二代码复杂度分析涉及的知识点数组题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输入:[1,2,4,7,11,15],15返回值[4,11]这题其实和力扣的第一题有些像,少了些条件解题思路一暴力解法,循环。代码省略(有点忙,后面补一下)复杂度分析时间复杂度:O(n)空间复杂度:O(1)解题

2021-05-14 18:12:38 66

原创 剑指offer

剑指offer 37、数字在升序数组中出现的次数涉及的知识点题目描述解题思路一代码复杂度分析解题思路二代码复杂度分析涉及的知识点数组、二分题目描述统计一个数字在升序数组中出现的次数。输入[1,2,3,3,3,3,4,5],3返回值4解题思路一暴力解法代码public class Solution { public int GetNumberOfK(int [] array , int k) { int num = 0; for(int i

2021-05-14 17:37:41 88 1

空空如也

空空如也

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

TA关注的人

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