随笔分类 -  剑指offer(Java版)

摘要:题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路:解法一:基于partition函数的O(n)算法。 先用partition函数对数组进行交换修... 阅读全文
posted @ 2015-11-11 10:47 我是一名老菜鸟 阅读(435) 评论(0) 推荐(0)
摘要:题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、cba。测试用例:1)功能测试(输入的字符串中有1个或者多个字符);2)特殊输入测试(输入的字符串的内容为空或者是null指针);相关题... 阅读全文
posted @ 2015-11-10 20:32 我是一名老菜鸟 阅读(487) 评论(1) 推荐(0)
摘要:题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。(本质是中序遍历)二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; ... 阅读全文
posted @ 2015-11-10 15:21 我是一名老菜鸟 阅读(229) 评论(0) 推荐(0)
摘要:题目:请实现ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibing指向链表中的任意结点或者null。struct ComplexListNode{ ... 阅读全文
posted @ 2015-11-09 11:40 我是一名老菜鸟 阅读(308) 评论(0) 推荐(1)
摘要:题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; ... 阅读全文
posted @ 2015-11-09 11:38 我是一名老菜鸟 阅读(241) 评论(0) 推荐(0)
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。测试用例:1)功能测试(输入的后序遍历的序列对应一棵二叉树,包括完全二叉树,所有结点都没有左/右子树的二叉树、只有一个结点的二叉树;输入的后续遍历的... 阅读全文
posted @ 2015-11-07 16:43 我是一名老菜鸟 阅读(262) 评论(0) 推荐(0)
摘要:题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入如图的二叉树,则依次打印出8,6,10,5,7,9,11.(其实是按层遍历)二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* ... 阅读全文
posted @ 2015-11-07 16:41 我是一名老菜鸟 阅读(321) 评论(0) 推荐(0)
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该栈序列的弹出序列。思路:如果下一个弹出的数字刚好是... 阅读全文
posted @ 2015-11-06 11:24 我是一名老菜鸟 阅读(303) 评论(0) 推荐(0)
摘要:实现思路:们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到栈元素的类型可能是复杂的数据结构,用最小元素的位置将能减少空间消耗)push到辅助栈中;每次pop一个元素出栈的时候,同时pop辅助栈。测试用例:1)功能测试(输入的两个数组含有多个数字或者只有1个数字... 阅读全文
posted @ 2015-11-06 11:19 我是一名老菜鸟 阅读(197) 评论(0) 推荐(0)
摘要:题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。测试用例:数组有多行多列,数组只有一行,数组... 阅读全文
posted @ 2015-11-04 11:00 我是一名老菜鸟 阅读(233) 评论(0) 推荐(0)
摘要:题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}求一棵树的镜像的过程:... 阅读全文
posted @ 2015-11-04 10:59 我是一名老菜鸟 阅读(287) 评论(0) 推荐(0)
摘要:题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}代码实现:package com.... 阅读全文
posted @ 2015-11-03 15:09 我是一名老菜鸟 阅读(227) 评论(0) 推荐(0)
摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增顺序的。struct ListNode{ int m_nKey; ListNode* m_pNext;}测试用例:1)功能测试(输入的两个链表有多个结点,结点的值互不相同或者存在值相等的多个结点);2)特殊输入测... 阅读全文
posted @ 2015-11-03 15:08 我是一名老菜鸟 阅读(254) 评论(0) 推荐(0)
摘要:题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;}相当于有两条链表,从一条链表复制到另外一条链表中。测试用例:1)输入的链表头指针是null;2)... 阅读全文
posted @ 2015-11-02 09:39 我是一名老菜鸟 阅读(237) 评论(0) 推荐(0)
摘要:题目:输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习惯,本体从1开始奇数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始他们的值一次是1、2、3、4、5、6.这个链表的倒数第3个结点是值为4的结点。思路:先是一个指针往前走,走了k步之后,前后指针一起走,但是要注... 阅读全文
posted @ 2015-11-02 09:38 我是一名老菜鸟 阅读(255) 评论(0) 推荐(0)
摘要:题目:输入一个整数数组,实现一个函数来调整该数组中数字的属性怒,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:其实就是用快速排序法的第一轮排序,从左右夹逼,左边遇到偶数,停下来,右边遇到奇数,停下来,交换,再夹逼,直到两个指针相遇。代码实现:package com.yyq;/**... 阅读全文
posted @ 2015-10-30 19:00 我是一名老菜鸟 阅读(397) 评论(0) 推荐(0)
摘要:题目:给定单向链表的头指针和一个结点指针,定义一个函数在o(1)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext; }void DeleteNode(Listnode** pListHead, Lis... 阅读全文
posted @ 2015-10-30 18:58 我是一名老菜鸟 阅读(685) 评论(0) 推荐(0)
摘要:题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999。思路:先把字符串中的每一个数字都初始化为‘0’,然后每一次为字符串表示的数字加1,再打印出来。只需要做两件事:一是在字符串表达的数字上模拟加法,二是把字符串表达的数字打印出来。测试用例:1)... 阅读全文
posted @ 2015-10-29 19:18 我是一名老菜鸟 阅读(417) 评论(0) 推荐(0)
摘要:题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。需要注意的地方:1)输入的指数小于1即是零和负数的情况;2)指数是负数时需要取倒数,当底数是0时的情况;3)0的0次方无论输出0或1... 阅读全文
posted @ 2015-10-29 19:16 我是一名老菜鸟 阅读(331) 评论(0) 推荐(0)
摘要:题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制1001,有2位是1。因此如果输入9,该函数输出2.相关题目:1)用一条语句判断一个整数是不是2的整数次方。一个整数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其他所有位都是0,,根据前面的分析,把... 阅读全文
posted @ 2015-10-28 18:59 我是一名老菜鸟 阅读(292) 评论(0) 推荐(0)