剑指offer
cuijiyue
这个作者很懒,什么都没留下…
展开
-
剑指offer--数据结构之二叉树(1、4、6、11、12、27、48、50、60)
offer1 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。二元查找树的中序遍历就是已经排序的序列,改成双向链表,可考虑,先把左子树改造成双向链表,保存好最后一个指针,然后将链表最后节点后驱指向跟节点,则根节点加入双向链表,然后在将右子树改造成双向链表。和中序遍历不同的是,需要一个指针保存双向链表的最后一个节点。代码:void原创 2013-09-03 12:59:30 · 1133 阅读 · 0 评论 -
剑指offer--细节(17、38、44)
offer17 输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。需要考虑到为负数,字符串中出现其他的非数字字符,数值溢出等情况。bool str_to_int(const char *a,int &n){ if(a==NULL){ printf("error,input is empty!\n"); return false;原创 2013-09-03 17:09:53 · 684 阅读 · 0 评论 -
剑指offer--简易哈希表(13、36、57)
offer13在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。可以采用256的一个数组存储字符出现的次数,因为只有256个字符。先遍历一遍字符串更新数组信息,然后再从头遍历字符串,找到数组中值为1的第一个字符即可。char find(char *a){ int n=strlen(a); int sign[256]={0}; int i; for(原创 2013-09-03 16:55:37 · 902 阅读 · 0 评论 -
剑指offer--数据结构之链表(9、19、35)
offer9 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。可以先设置一个指针 p1,在链表中前进k步,然后加入新的指针 p2,和 p1同步遍历,直到 p1到尾部,那么 p2就是倒数第k个结点。需要注意两个地方,当链表长度不足k时,和倒数是从0开始的。代码:链表附带头节点。Node* FindKthTotail(Node* pHead, int原创 2013-09-03 11:18:11 · 968 阅读 · 0 评论 -
剑指offer--简易动态规划(3、10、20、26,61)
动态规划的思想是在前一步的信息已经保存好,下一步在之前保存信息的基础上做下一步计算。offer3 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。假设之前的子数组已经得出最大和,当子数组长度向右延长1位时,子树组所有值加上延长的1位,如果和为负数,那么加上后面的连续值肯原创 2013-09-03 16:17:17 · 1202 阅读 · 0 评论 -
剑指offer--数据结构之栈(2,18,24,39)
明天编辑原创 2013-09-02 22:42:22 · 740 阅读 · 0 评论 -
剑指offer--位运算(22、34、63)
offer22 输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。典型的位运算题目void bit_find(const int& num,int* bit_array){ int i,mask; mask=1; for(i=31;i>=0;i--){ bit_array[i]=(bool)(num&mask);原创 2013-09-03 17:24:27 · 880 阅读 · 0 评论 -
剑指offer--算法(7、14、16、21、25、28、59、37、43、51、46、58)
offer7 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。可以采用一个栈实现,单词和空格分开处理,但是太麻烦了。下面是博主的思路由于本题需要翻转句子,我们先颠倒句子中的所有字符。这时,不但翻转了句子中单原创 2013-09-03 22:14:49 · 1169 阅读 · 0 评论 -
剑指offer--发散思维(23、31、33、40、41、42、47、49、55)
offer23 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。遇到不会的题目可以想想递归,假设 f(n),表示n级台阶的跳法,那么最后一跳只有两种可能,跳了1级或者跳了2级,即f(n)=f(n-1)+f(n-2),递归公式和非博纳契数列是一样的 / 1 n=1f原创 2013-09-03 20:58:40 · 1023 阅读 · 0 评论 -
剑指offer--快速排序变形(5、29)
offer5 题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。题目可以利用快速排序第一步来做,先选取首位的值,将小于该值的放在左边,大于等于该值的放在右边,如果该值的位置正好是k,那么该值连同左边的值就是最小的k个,如果位置小于k,那么在右边继续执行,如果大于k,那么在左边继续执行,时间复杂度平均是O(原创 2013-09-03 16:34:42 · 1686 阅读 · 0 评论