随笔分类 - Algorithms
Data Structures and Algorithms
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。比如,输入下图中左边的二叉搜索树,则输出转换之后的排序双向链表。  牛客网刷题地址思路分析 利用中序遍历的思想,当我们遍历到根节点时,它的左子树已经转换成一个排序的链表了,并且处在链表中的最后一个节点是当前值最大的一个节点,...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)牛客网刷题地址思路分析第一步,可以将复制原始链表上的每个节点,并链接起来,第二步,设置每个节点的特殊指针,这种思路需要O(n2)的...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。  输入上图二叉树以及22,可以打印出两条路径,[10,12] 和[10,5,7] 牛客网刷题地址思路分析 递归的前序遍历二叉树 ,将沿途路径中的值添加到list中,每次与target相减,当ta...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true, 否则返回false. 假设输入的数组的任意两个数字都互不相同。例如,输入数组{5,7,6,9,11,10,8},则返回true,因为这个整数序列是下图二叉搜索树的后序遍历结果。如果输入的数组是{7,4,6,5},则由于没有哪棵二叉搜索树的后序遍历结果是这个序...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述不换行:从上到下打印出二叉树的每个节点,同层的节点按照从左到右的顺序打印。例如,输入下图的二叉树,则依次打印出8,6,10,5,7,9,11。牛客网刷题地址要换行:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行86 105 7 9 11牛客网刷题地址之字形:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。牛客网刷题地址思路分析如果下一个弹出的数字刚好是栈顶数字,那么直接...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是0(1)。牛客网刷题地址思路分析设置一个辅助栈用来存储每次进栈之后的最小元素测试用例新压入栈的数字比之前的最小值大。新压入栈的数字比之前的最小值小。弹出栈的数字不是最小元素。弹出栈的数字是最小元素。Java代码publ...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如,如果输入如下矩阵:  则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。牛客网刷题地址思路分析将矩阵看成若干个顺时针方向的圈组成.第一步:接下来分析循环结束的条件。假设这个矩阵的行数是rows,列数是columns。打印第...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请实现一个函数,用来判断一-棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。牛客网刷题地址思路分析 利用前序遍历(根-左-右)和对称器前序遍历(根-右-左),查看两个的遍历序列是否相同,如果出现二叉树中全是同一节点的情况,我们可以讲null也添加到遍历序列中比较。 利用递归的方法,在遍历的过程中比较他们的值是否相同,...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述请完成一个函数,输入一颗二叉树,该函数输出它的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 ...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述输入两棵二叉树A和B,判断B是不是A的子结构。图中右边的树是左边的子结构思路分析先对树A进行遍历,找到与树B的根结点值相同的节点R;判断树A中以R为根结点的子树是否包含B树一样的结构。测试用例功能测试:树A和树B都是普通的二叉树;树B是或者不是树A的子结构。特殊输入测试:两棵二叉树的--个或者两个根节点为nullptr指针;二叉树的所有节点都没...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。例如,输入图中的链表1和链表2,则合并之后的升序链表如链表3所示。链表节点定义如下:思路分析非递归,设置一个头结点,比较两个链表中的值,通过头结点将其串联起来,最后返回的是头结点的next递归方法。测试用例功能测试:输入的两个链表有多个节点;节点的值互不相同或者存在值...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思路分析利用三个指针,pre,p,pNext,将p的next指向前面的节点,注意反转之后的头节点。头插法的思想,设置一个头结点,利用头插法建立链表测试用例功能测试:输入的链表含有多个节点;链表中只有一个节点。特殊输入测试:链表头节点为nullptr指针。Java代码publi...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述一个链表中包含环,如何找出环的入口结点?思路分析判断链表中是否有环:用快慢指针的方法,慢指针走一步,快指针走两步,如果快指针追上了慢指针,就说明有环,而且他们相遇的节点是处于环中的节点统计环中节点的个数:利用1中返回的节点,当再次走到该节点时,正好遍历了整个环,从而可以统计出个数n。找出入口结点:也是设置两个指针,第一个指针先向后移动n,第二个...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述输入一个链表,输出该链表中倒数第k个结点。思路分析采用双指针的方法,第一个指针首先向前移动k-1个位置,第二个指针指向头节点,然后将两个指针同时向后移动,如果第一个指针走到链表尾结点时,第二个指针的位置就正好为 倒数第k个节点测试用例功能测试:第k个节点在链表的中间;第k个节点是链表的头节点;第k个节点是链表的尾节点。特殊输入测试:链表头节点为n...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,(偶数之间和奇数之间要保持相对顺序)思路分析如果题目没有要求保持相对顺序,则可以利用快速排序中的“二分”的思想,设置两个指针分别指向数组的头和尾,要将奇数排在偶数的前面,就要头指针扫描到偶数时停止,尾指针要扫描到奇数时停止如...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路分析 根据《剑指Offer》中使用A.Be/EA的模式,A部分表示带符号整数,B部分表示无..
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。 例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 思路分析 使用递归函数 matchCor...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。【示例】输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> ...
阅读全文
摘要:题目描述思路分析测试用例代码链接题目描述 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。思路分析 一般我们删除单链表中的节点是需要遍历链表,找到要删除节点的前一个元素,但是那样的时间复杂度为O(n),要在O(1)的时间内删除给出的节点,我们可以将删除节点p的下一个结点的值赋给p ,而我们只要删除p的下一个结点就可以了,同时我们还要注意边界值:要删除的节点p是尾结点,...
阅读全文


浙公网安备 33010602011771号