Problem1:单例模式实现
public class Singleton { |
Problem2:二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
/** |
Problem3:替换空格
请实现一个函数,将字符串的每个空格替换为”%20”。例如输入We are happy
,则输出We%20are%20happy
。
/** |
Problem4:从尾到头打印链表
输入一个链表的头结点,按照从尾到头的顺序打印出每个节点的值
static class ListNode<T> { |
Problem5:重建二叉树
输入某二叉树的前序遍历和中序遍历结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不包含重复的数字。
例如输入前序遍历序列: {1, 2, 4, 7, 3, 5, 6, 8}
中序遍历序列:{4, 7, 2, 1, 5, 3, 8, 6}
重建出所示二叉树并且输出它的头结点。
1 |
知识点补充
前序遍历:先访问根节点,再访问左子结点,最后访问右子结点;(根左右)
中序遍历:先访问左子结点,再访问根结点,最后访问右子结点;(左根右)
后序遍历:先访问左子结点,再访问右子结点,最后访问根结点;(左右根)
二叉搜索树:左子结点总是小于或等于根结点,而右子结点总是大于或等于根结点。
二叉树的特例是堆和红黑树。
堆分为最大堆和最小堆。在最大堆中根节点的值最大,在最小堆中根节点的值最小。
红黑树是把树中的结点定义为红、黑两种颜色,并通过规则确保从根结点到叶结点的最长路径的长度不超过最短路径的两倍。
Problem6:用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail
和deleteHead
,分别完成在队列尾部插入结点和在队列头部删除结点的功能
public class ConstructQueue { |
输出如下
a |
Problem7:旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转 。输入一个递增排序的数组的旋转,输出旋转数组的最小元素。
例如数组 {3, 4, 5, 1, 2}
为{1, 2, 3, 4, 5}
的一个旋转,该数组的最小值为 1;
public static void main(String[] args) { |
Problem8:斐波那契数列
写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下:
n=0, f(n)=0;
n=1, f(n)=1;
n>1, f(n) = f(n-1) + f(n-2).
public static void main(String[] args) { |
输出结果
0 1 1 2 3 5 8 13 21 34 55 |
Problem9:二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2。
public static int oneCountsOfBinary(int i) { |
Problem10:数值的整数次方
实现函数double power(double base, int exponent)
,求 base 的 exponent 次方。不能使用库函数,同时不需要考虑大数问题。
public static double power(double base, int exponent) { |
Problem11:O(1)时间删除链表结点
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
static class Node { |
Problem12:调整数组中奇数和偶数的先后顺序
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 奇数位于数组的前半部分,所有偶数位于数组的后半部分;
public static void orderArray(int[] array) { |
Problem13:链表中倒数第K个结点
输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习 惯,从1开始计数,即链表的尾结点是倒数第一个结点。
例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6
。这个链表的倒数第三个结点是值为4的结点。
/** |
Problem14:翻转链表
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点
/** |
Problem15:合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
public static ListNode merge(ListNode n1, ListNode n2) { |