第11题:
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。来源:力扣(LeetCode)
1、首先想到的时双层循环的解决方法,利用两个for循环将各个容器的体积计算出来,比较得出最大数。
2、另外一种时利用双指针分别指向坐标轴的第一条柱子和最后一条柱子;
此时计算处这两根柱子和坐标轴形成的容器体积,此时就需要换一根柱子来计算容器体积;
由于无论是最右边的或者是最左边的柱子向内移动一位,其底面积是不变的,如果将长的那根柱子舍弃,此时所组成的面积只会变得更短,所以此时将短的那根舍弃;
照着这样依次比较可以得出最大的容积。
第144题:
给定一个二叉树,返回它的 前序 遍历。(来自LeetCode)
1、对于树形结构,可以使用递归的方法来返回它的前序遍历。
2、也可以使用非递归的方法来返回其前序遍历:创建一个栈来存放各个树节点;
然后判断此树是否为空,为空则直接返回result,当树不为空时,将根节点入栈;
然后判断栈是否为空,当栈不为空时,将首个树节点元素出栈,再把这个树节点元素上的数据放如数组result内;
然后将该树节点的右子树和左子树依次入栈(因为栈先进后出的特性,所以将右子树先进栈);
利用栈不为空的条件限制,可以返回二叉树的前序遍历。
第589题:
给定一个 N 叉树,返回其节点值的前序遍历。(来自LeetCode)
1、先是递归的方法,由于N叉树和二叉树相对来说就是每个节点增加了多个子节点,所以递归也类似。
2、非递归算法和二叉树的非递归算法类似,利用依次入栈出栈来返回树的前序遍历。