剑指offer
文章平均质量分 85
haikuotiankongdong
这个作者很懒,什么都没留下…
展开
-
剑指offer---链表中倒数第k个数(链表中倒数第k个结点)
1.概述鲁棒是英文Robust的音译,有时也翻译成健壮性。所谓的鲁棒性是指程序能够判断输入是否合乎规范要求,并对不符合要求的输入予以合理的处理。当我们用一个指针遍历链表不能解决问题的时 候 ,可以尝试用两个指针来遍历链表可以让其 中一个指针遍历的速度快一些(比如一次在链表上走两步),或者让它先在链表上走若千步。2.问题输入一个链表,输出该链表中倒数第k个结点。3.思路1为了得到倒数第k个节点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是我们从链表节点的定义可以看出,本题中的链表是单向链原创 2021-01-23 11:07:44 · 406 阅读 · 0 评论 -
1 剑指offer--数组--二维数组中的查找
二维数组中的查找基础知识1 数组和字符串是两种最基本的数据结构,它们用连续内存分别存储数字和字符2 栈是一个与递归紧密相关的数据结构,3 队列也与广度优先遍历算法紧密相关,4 数组可以说是最简单的一种数据结构,它占据一块连续的内存并按照顺序存储数据。创建数组时,我们需要首先指定数组的容量大小,然后根据大...原创 2019-10-09 22:33:22 · 312 阅读 · 0 评论 -
2 剑指offer--字符串--替换空格
替换空格基础知识C/C++中每个字符串都以字符'\0'作为结尾,这样我们就能很方便地找到字符串的最后尾部。但由于这个特点,每个字符串中都有一个额外字符的幵销,稍不留神就会造成字符串的越界Java里面一切都是對象,是對象的話,字符串肯定就有长度,即然有长度,编译器就可以確定要輸出的字符个数,当...原创 2019-10-10 10:46:06 · 275 阅读 · 0 评论 -
3 剑指offer--链表--从尾到头打印链表
链表--从尾到头打印链表(剑指 LeetCode)基础知识链表应该是面试时被提及最频繁的数据结构。链表的结构很简单,它由指针把若干个节点连接成链状结构。链表的创建、插入节点、删除节点等操作都只需要20行左右的代码就能实现,其代码量比较适合面试。链表是一种动态数据结构,是因为在创建链表时,无须知道链表的长度。当插入一个节点时,我们只需...原创 2019-10-11 22:42:25 · 372 阅读 · 0 评论 -
4 剑指offer--树--重建二叉树
树--重建二叉树前序+中序 中序+后序是可以构建出二叉树的但是没有中序是不行的概述树是一种在实际编程中经常遇到的数据结构。它的逻辑很简单:除根节点之外每个节点只有一个父节点,根节点没有父节点:除叶节点之外所有节点都有一个或多个子节点,叶节点没有子节点。 父节点和子节点之间用指针链接。由于树的操作会涉...原创 2019-10-10 17:08:36 · 365 阅读 · 0 评论 -
5 剑指offer--栈队列--互相实现
用两个栈实现队列栈是一个非常常见的数据结构,它在计算机领域被广泛应用,比如操作系统会给每个线程创建一个栈用来存储函数调用时各个函数的参数、返回地址及临时变量等。桟的特点是后进先出,即最后被压 入 (push) 栈的元素会第一个被弹出(pop)。通常栈是一个不考虑排序的数据结构,我们需要〇( n )时间才能找到...原创 2019-10-10 19:22:30 · 679 阅读 · 0 评论 -
6 剑指offer--数组排序--旋转数组的最小数字
旋转数组的最小数字1 查找排序概述通常排序和查找是面试时考查算法的重点。在准备面试的时候,我们应该重点掌握二分查找、归并排序和快速排序,做到能随时正确、完整地写出它们的代码。面试小提示:如 果 面 试 题 是 要 求 在 排 序 的 数 组 (或 者 部 分 排 序 的 数 组 )中查找一个数字或者统计某个数...原创 2019-10-12 20:20:34 · 256 阅读 · 0 评论 -
7 剑指offer--排序查找--斐波那契数列
斐波那契数列基础如果我们需要重复地多次计算相同的问题,则通常可以选择用递归或者循环两种不同的方法。递归是在一个函数的内部调用这个函数自身。而循环则是通过设置计算的初始值及终止条件,在一个范围内重复运算。比如求1+2+-+ « ,我们可以用递归或者循环两种方式求出结果。通常递归的代码会比较简洁。在上面的...原创 2019-10-13 12:43:11 · 354 阅读 · 0 评论 -
8 剑指offer--爬楼梯 跳台阶(暴力法,动态规划)
算法--爬楼梯假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶...原创 2019-09-21 10:46:57 · 400 阅读 · 0 评论 -
9 剑指offer--动态规划---变态跳台阶
变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路可以延续上一题的思路,逆向思维来考虑这个问题。要想跳到第n级台阶,就可以从第n-1级、第n-2级、***、第1级 跳到第n级,再加上直接从地面到第n级的一种...原创 2020-02-01 13:01:41 · 281 阅读 · 0 评论 -
10 剑指offer--动态规划--矩形覆盖
矩形覆盖public class Solution { public int RectCover(int target) { if(target<=1){ return 1; } else if(target ==2){...原创 2020-02-01 13:25:36 · 231 阅读 · 0 评论 -
11 剑指offer--位运算--二进制中1的个数
二进制中1的个数基础知识位运算是把数字用二进制表示之后,对每一位上0 或 者 I 的运算。二进制及其位运算是现代计算机学科的基石,很多底层的技术都离不开位运算,因此与位运算相关的题目也经常出现在面试中。我们在日常生活中习惯了十进制,很多人看到二进制及位运算都觉得很难适应。理解位运算的第一步是理解二进制。二进制是...原创 2019-10-14 11:34:16 · 481 阅读 · 0 评论 -
12 剑指offer--位运算、递归--数值的整数次方(超级次方)
基本知识概述通常我们有3 种方式把错误信息传递给函数的调用者。第一种方式是函数用返回值来告知调用者是否出错。比如很多Windows的 AP[就是这个类型。在 Windows中,很多API的返回值为0 表示API调用成功,而返回值不为0 表示在API的调用过程中出错了。微软为不同的非零返回值定义了不同的意义...原创 2019-10-15 19:36:30 · 254 阅读 · 0 评论 -
13 剑指offer--双指针--调整数组顺序使奇数位于偶数的前面
调整数组顺序使奇数位于偶数的前面问题输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路创建双向队列,遍历数组,奇数前插入,偶数后插入。最后使用assign方法实现不同容器但相容的类型赋值。因此我们可以维护两...原创 2019-10-16 15:36:46 · 346 阅读 · 0 评论 -
14 剑指offer--链表--链表中倒数第k个数(链表中倒数第k个结点)
链表中倒数第k个数概述鲁棒是英文Robust的音译,有时也翻译成健壮性。所谓的鲁棒性是指程序能够判断输入是否合乎规范要求,并对不符合要求的输入予以合理的处理。当我们用一个指针 遍 历 链 表 不 能 解 决 问 题 的 时 候 ,可以尝试用两个指针 来 遍 历 链 表 可 以 让 其 中 一 个 指 针 遍 历 的 ...原创 2019-10-16 17:24:31 · 486 阅读 · 0 评论 -
15 剑指offer--链表--反转链表
反转链表题目输入一个链表,反转链表后,输出链表的所有元素。思路这个很简单,我们使用三个指针,分别指向当前遍历到的结点、它的前一个结点以及后一个结点。在遍历的时候,做当前结点的尾结点和前一个结点的替换。方法一:迭代假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。...原创 2019-10-16 19:39:11 · 772 阅读 · 0 评论 -
16 剑指offer--链表--合并两个排序的链表
合并两个排序的链表题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路先判断输入的链表是否为空的指针。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接返回第一个链表。如果两个链表都是空链表,合并的结果是得到一个空链表。两个链表都是...原创 2019-10-18 16:59:30 · 437 阅读 · 0 评论 -
17 剑指offer--树--树的子结构 子树
树的子结构 、子树题目输入两颗二叉树A,B,判断B是不是A的子结构。(PS:我们约定空树不是任意一个树的子结构)。思路要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和B的根结点的值一样的结点R,第二步再判断树A中以R为根节点的子树是不是包含和树B一样的结构。这里使用递归...原创 2019-10-18 20:17:36 · 181 阅读 · 0 评论 -
18 剑指offer--树--二叉树的镜像
二叉树的镜像问题翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1思路先交换根节点的两个子结点...原创 2019-10-19 16:57:40 · 128 阅读 · 0 评论 -
19 剑指offer--数组--顺时针打印矩阵
顺时针打印矩阵题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:则依次打印出数组:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。思路将结果存入vector数组,从左到右,再从上到下,再从右到左,最后从下到上遍历。代码...原创 2019-10-20 21:56:02 · 296 阅读 · 0 评论 -
20剑指offer---包含min函数的栈、合并min函数的栈
包含min函数的栈、合并min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。public class Solution { Stack<Integer> stacks1 = new Stack<>(); Stack<...原创 2020-02-06 14:56:16 · 171 阅读 · 0 评论 -
21 剑指offer--栈--栈的压入、弹出序列
栈的压入、弹出序列题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)...原创 2019-10-23 12:03:50 · 310 阅读 · 0 评论 -
22 59 (10)剑指offer 数据结构---二叉树的遍历 N叉树的层序遍历
二叉树的遍历public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}前序遍历// 用递归的方法进行先序遍历public void...原创 2019-10-19 15:50:01 · 515 阅读 · 0 评论 -
23 剑指offer--树--二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列问题输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路以{5,7,6,9,11,10,8}为例,后序遍历结果的最后一个数字8就是根结点的值。在这个数组中,前3个数字5、7和6都比8小,是值为8的...原创 2019-10-23 17:30:16 · 216 阅读 · 0 评论 -
24 剑指offer--递归--二叉树中和为某一值的路径
二叉树中和为某一值的路径题目输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路深度优先搜索。使用前序遍历,使用两个全局变量result和tmp,result来存放最终结果,tmp用来存放临时结果。每次遍历,我们先把root的值...原创 2019-10-24 10:23:32 · 198 阅读 · 0 评论 -
25 剑指offer--链表--复杂链表的复制
复杂链表的复制题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路大部分人首先想到的可能是先复制复杂指针的label和next,然...原创 2019-10-24 21:01:23 · 410 阅读 · 0 评论 -
26 剑指offer--链表、树--二叉搜索树与双向链表
二叉搜索树与双向链表题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路举例说明:二叉搜索树如上图所示,我们将其转换为配需双向链表。根据二叉搜索树的特点:左结点的值<根结点的值<右结点的值,我们不难发现,使用二叉树的中序遍...原创 2019-10-28 11:10:16 · 282 阅读 · 0 评论 -
27 剑指offer--字符串--字符串的排列
字符串排列题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路我们求整个字符串的排列,可以看成两步:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符...原创 2019-10-28 17:41:49 · 211 阅读 · 0 评论 -
LeetCode--子集(回朔法)
子集给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3],...原创 2019-10-30 17:45:02 · 199 阅读 · 0 评论 -
28 剑指offer--数组--数组中出现次数超过一半的数字(众数)
数组中出现次数超过一半的数字题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字...原创 2019-10-31 09:29:31 · 285 阅读 · 0 评论 -
29 剑指offer--堆 数组--最小的K个数
最小的K个数题目输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。思路最简单的方法就是先排序,然后在遍历输出最小的K个数,方法简单粗暴。代码代码1 找一个放置的空间public ArrayList<Integer...原创 2019-10-31 12:11:46 · 263 阅读 · 0 评论 -
30 剑指offer--最大子序和(暴力法,动态规划,数组规律)找出区间、连续子数组最大和
最大子序和给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,...原创 2019-09-19 16:52:59 · 267 阅读 · 0 评论 -
31 剑指offer---从1到n整数中1出现的次数
从1到n整数中1出现的次数(Java)题目给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。示例:输入: 13输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。思考一注:(这里的 X∈[1,9] ,因为 X=0 不符合下列规律,需要单独计算)。...原创 2020-01-14 21:43:55 · 475 阅读 · 0 评论 -
32 剑指offer--数组--把数组排成最小的数
把数组排成最小的数题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路遇到这个题,全排列当然可以做,但是时间复杂度为O(n!)。在这里我们自己定义一个规则,对拼接后的字符串进行比较...原创 2019-11-03 13:00:36 · 181 阅读 · 0 评论 -
33 剑指offer---丑数
丑数题目把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路所谓的一个数m是另一个数n的因子,是指n能被m整除,也就是n%m==0。根据丑数的定义,丑数只能被...原创 2019-11-03 14:54:09 · 168 阅读 · 0 评论 -
34 剑指offer--字符操作--第一个只出现一次的字符
第一个只出现一次的字符目录 第一个只出现一次的字符题目思路知识普及代码方法2方法3数组的代码课后习题1删除在第二个字符串中出现过的所有字符课后习题2去掉字符串中重复的字符课后习题3变位词题目在一个字符串(...原创 2019-11-04 15:00:03 · 419 阅读 · 0 评论 -
35 剑指offer--逆序对--数组中的逆序对
数组中的逆序对题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007。输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,si...原创 2019-11-05 16:10:06 · 353 阅读 · 0 评论 -
36 剑指offer--链表--两个链表的第一个公共结点
两个链表的第一个公共结点题目输入两个链表,找出它们的第一个公共结点。思路这道题和160.Intersection of Two Linked Lists是一样的。都是求两个链表的第一个公共结点。公共结点的样子:上图就是一个有公共结点的例子,在公共结点之后,两个链表指针指向的地址是相同的。这道题有两个解法。...原创 2019-11-05 09:56:56 · 232 阅读 · 0 评论 -
37 剑指offer --数字在排序数组中出现的次数
数字在排序数组中出现的次数题目统计一个数字在排序数组中出现的次数。思路既然是已经排序好的数组,那么第一个想到的就是二分查找法。做法就是使用二分法找到数字在数组中出现的第一个位置,再利用二分法找到数字在数组中出现的第二个位置。时间复杂度为O(logn + logn),最终的时间复杂度为O(logn)。举个例子,找到数...原创 2020-01-15 19:35:08 · 395 阅读 · 0 评论 -
38 剑指offer--二叉树的最大深度(递归法)
二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。思路1/** * Defini...原创 2019-10-07 21:27:21 · 288 阅读 · 0 评论