参考:http://zhedahht.blog.163.com 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照增序排列的。 输入两个单链表(无环),找出他们的第一个公共节点。 判断两个单链表(可能有环…
分类:剑指offer
简单链表
参考:http://zhedahht.blog.163.com/ 输入一个链表的头结点,从尾到头反过来打印出每个节点的值。 给定单向链表的头结点和一个结点指针,定义一个函数在O(1)时间删除该结点。 输入一个单链表的,输…
栈的压入弹出序列
输入两个整数序列,第一个表示压入顺序,判断第二个是否是该栈的弹出顺序。 选择题 1、思路: 对弹出序列的元素依次分析,如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还…
两个栈的配合
转:http://zhedahht.blog.163.com 用两个栈实现队列。 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小min函数。在该栈中,调用min和push及pop的时间复杂度都是O(1)。 1、思…
复杂链表的克隆
map 题目:复杂链表的节点信息,除了next的指向以外,还有sibling的指向。请复制该链表。 思路: 1、可以利用STL中的map容器,存放原始节点和克隆节点的映射关系。这样第二遍遍历原始链表的时候就可以通过该映射…
广度优先遍历
从上向下打印二叉树的每个节点, 同一层的节点按照从左到右的顺序打印。 判断一棵树是否是完全二叉树。 将一棵完全二叉树层次遍历转化为一个链表。(不用队列) 1、思路: 可以使用双端队列deque容器,头负责打印,尾负责…
STL规范
标准库定义了顺序容器和关联容器,顺序容器内的元素按其位置存储和访问,关联容器内的元素按其键(key)排序。容器只定义了少量的操作,其他大量的操作是通过算法库实现,比如说排序和查找。算法库中的算法没有为每种容器类型设计…
堆排序及拓展
set 请写出堆排序的代码。 输入n个整数,找出其中最小的k个数。 1、思路: 堆排序分为建堆(insertion)和取根数据(delete root)。每一步都涉及到堆调整,堆调整算法的时间复杂度为O(logn)。…
归并排序及拓展
请在较短的时间内写出归并排序的程序。 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组, 求出该数组中的逆序对的总数。 1、思路: 二叉树后序遍历的思想,即先递归排序左右子树…
斐波那契数列
参考:剑指offer 写一个函数,输入n, 求斐波那契数列的第n项。 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。 我们可以用2×1的小矩形横着或竖着去覆盖更大的矩形。请…
字符全排列
输入一个字符串, 打印出该字符串中字符的所有排列。举个例子,123的全排列有123、132、213、231、312、321这六种。 字符串全排列扩展—-八皇后问题 1、思路: 递归思路:全排列就是从第一个…
计数排序及拓展
在字符串中找出第一个只出现一次的字符。(35) 对公司员工的年龄进行统计排序。 计数排序(适用于有边界的数值统计)。 1、思路: 因为字符只有256个数字,设置一个hashtable只有256*4=1K字节,这样时间…