随笔分类 - 常用算法
摘要:题目 一个数组的MaxTree定义: 数组必须没有重复元素 MaxTree是一棵二叉树,数组的每一个值对应一个二叉树节点 包括MaxTree树在内且在其中的每一棵子树上,值最大的节点都是树的头 给定一个没有重复元素的数组arr,写出生成这个数组的MaxTree的函数,要求如果数组长度为N,则时间负责
阅读全文
摘要:题目 有一个整形数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 例如:数组为[4,3,5,4,3,3,6,7],窗口大小为3时: [4,3,5],4,3,3,6,7 5 4,[3,5,4],3,3,6,7 5 4,3,[5,4,3],3,6,7 5 4,3,5,[
阅读全文
摘要:题目 在汉诺塔规则的基础上,限制不能从最左的塔移动到最右的塔上,必须经过中间的塔,移动的跨度只能是一个塔。当塔有N层的时候,打印最优移动过程和最优移动步数。 要求 方法一:使用递归的方法进行移动 方法二:使用栈进行移动 解答思路 方法一: 无论多少层,都看作有两层,最大的一层(命名为X)、(N 1)
阅读全文
摘要:题目 将一个栈里面的元素逆序,只能用递归函数来实现,不能用其他数据结构。 要求 1. 只能用递归函数来实现 2. 可以使用现成的栈类型 思路 为了将栈逆序,只需要按顺序将栈顶至栈底的元素拿出并移除,放置到栈顶中,这样就可以将栈逆序。 代码 实现代码 import java.util.Stack; /
阅读全文
摘要:题目 实现一个特殊的栈,在实现栈的基础上,再实现返回栈中最小的元素的操作。 要求 1. pop、push、getMin的时间复杂度是O(1) 2. 可以使用现成的栈类型 思路 如下图所示,在栈结构中,每次pop的过程中,产生的最小值,分别为:1、2、6,在pop过程会出现两个规律: 1. 每次pop
阅读全文
摘要:题目 编写一个类,用两个栈实现队列,支持队列的基本操作(add, poll, peek) 要求 无 思路 使用两个栈,栈A用于add,栈B用于poll和peek,add的时候,往栈A中push元素,poll时,如果栈B不是空,则弹出最顶元素,如果为空则将栈A的所有元素pop,然后push到栈B中。这
阅读全文