题目描述
给你一根长度为n的绳子,请把绳子剪成整数长的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0], k[1],…, k[m]。请问 k[0] x k[1] x … x k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18。
1 | public int cutRope(int target) { |
我在转角吃炒粉。
给你一根长度为n的绳子,请把绳子剪成整数长的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0], k[1],…, k[m]。请问 k[0] x k[1] x … x k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18。
1 | public int cutRope(int target) { |
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7,2,1,5,3,8,6},则重建二叉树并返回。
先序排列顺序为:根-左-右,中序排列为:左-根-右。
例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7,2,1,5,3,8,6}。
那么如题根为1,则根据中序遍历序列则可以得到左子树 {4,7,2} 和右子树 {5,3,8,6}。
又根据前序遍历则可以得到左子树的根为 2,右子树的根为 3。
重复以上两步,直到左右子树皆为空时即可重建二叉树如图。
1 | public TreeNode reConstructBinaryTree(int[] pre, int[] in) { |
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
1 | Stack<Integer> stack1 = new Stack<Integer>(); |
输入一个链表,反转链表后,输出新链表的表头。
1 | public ListNode ReverseList(ListNode head) { |
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
1 |
|