剑指offer
iamxiaofeifei
Thinking and coding...
展开
-
[剑指offer]面试题58:二叉树中的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 /* struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next;原创 2017-08-18 22:48:14 · 227 阅读 · 0 评论 -
[剑指offer]面试题20:顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 对于只有一行、一列的情况特殊考虑;对边界条件设置清除,细心一点即可。class Solution { public:原创 2017-10-02 10:09:04 · 349 阅读 · 0 评论 -
[剑指offer]面试题19:二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 用递归来写,超简洁。/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {原创 2017-10-01 22:22:21 · 266 阅读 · 0 评论 -
[剑指offer]面试题18:树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ原创 2017-10-01 22:14:49 · 275 阅读 · 0 评论 -
[剑指offer]面试题17:合并两个排序的数组
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { pu原创 2017-09-30 15:04:22 · 386 阅读 · 0 评论 -
[剑指offer]面试题16:反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Rev原创 2017-09-30 14:56:54 · 302 阅读 · 0 评论 -
[剑指offer]面试题10:二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 使用位运算& n&(n-1) 运算一次,就会将n二进制最右侧的1消掉class Solution { public: int NumberOf1(int n) { int count = 0; while(n){ n &= n - 1;原创 2017-09-30 14:21:07 · 276 阅读 · 0 评论 -
[剑指offer]面试题9:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 方法一:简单的动态规划的思想。 方法二:公式法,时间复杂度log(n),代码略。 递归性能太差就不用写了。class Solution { public: int Fibonacci(int n) { if(n <= 0) return原创 2017-09-30 14:07:41 · 334 阅读 · 0 评论 -
[剑指offer]面试题8:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 由于题目中规定数组是有序的,所以可以考虑使用二分查找,将时间复杂度降低至log(n)class Solut原创 2017-09-30 13:53:48 · 238 阅读 · 0 评论 -
[剑指offer]面试题7:用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 class Solution { public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty()){ while(!stac原创 2017-09-30 11:19:36 · 276 阅读 · 0 评论 -
[剑指offer]面试题5:从尾到头打印链表
// 栈实现 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector<原创 2017-08-12 12:41:04 · 216 阅读 · 0 评论 -
[剑指offer]面试题4:替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 class Solution { public: string replaceSpace(string s) { // 1.找出s中空格的个数,确定新string的长度 // 2.反向遍历s原创 2017-09-30 10:36:14 · 285 阅读 · 0 评论 -
[剑指offer]面试题3:二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 class Solution { public: bool Find(int target, vector<vector<int> > array) { // 从右上角开始比较原创 2017-09-30 10:15:26 · 352 阅读 · 0 评论 -
C++常用
INT_MAX, INT_MIN atoi C 语言 atoi(s.substr(0,2).c_str()) C++: int i = std::stoi(str); 同样, 可以使用 stol(long), stof(float), stod(double) 等.heap、make_heap、pop_heap、push_heap sort sort(a.begin(),原创 2017-09-06 13:23:40 · 212 阅读 · 0 评论 -
[剑指offer]面试题8:树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 注意与LeetCode 572. Subtree of Another Tree的区别,LeetCode强调的是子树,此题强调的是子结构。/* struct TreeNode { int val; struct TreeNode *left; struct TreeN原创 2017-08-21 23:40:46 · 298 阅读 · 0 评论 -
[剑指offer]面试题37.两个链表中的第一个公共节点
输入两个链表,找出它们的第一个公共结点。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommo原创 2017-08-13 11:12:19 · 244 阅读 · 0 评论 -
[剑指offer]面试题15.链表中倒数第K个节点
输入一个链表,输出该链表中倒数第k个结点。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail原创 2017-08-13 11:02:08 · 237 阅读 · 0 评论 -
[剑指offer]面试题56:链表中环的入口结点
题目描述 一个链表中包含环,请找出该链表的环的入口结点。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* EntryN原创 2017-10-19 17:10:29 · 258 阅读 · 0 评论