随笔分类 - 剑指offer
摘要:数组问题。输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 C++版本 #include <iostream> #include <vector> #include <stack> #include <cstring> #inclu
阅读全文
摘要:分行从上到下打印二叉树(其实就是广度优先遍历),引用辅助队列。 不管是广度优先遍历一幅有向图还是一棵树,都要用到队列。首先把起始节点(对树而言是根节点)放入队列。接下来每次从队列的头部取出一个节点,遍历这个节点之后把它能到达的节点(对树而言是子节点)都依次放入队列。重复这个遍历过程,知道队列中的节点
阅读全文
摘要:从上到下打印二叉树(其实就是广度优先遍历),引用辅助队列。 不管是广度优先遍历一幅有向图还是一棵树,都要用到队列。首先把起始节点(对树而言是根节点)放入队列。接下来每次从队列的头部取出一个节点,遍历这个节点之后把它能到达的节点(对树而言是子节点)都依次放入队列。重复这个遍历过程,知道队列中的节点全部
阅读全文
摘要:栈的压入、弹出序列,很经典。 C++版本 #include <iostream> #include <vector> #include <stack> #include <cstring> #include <algorithm> using namespace std; // 定义辅助栈 stac
阅读全文
摘要:本题考查栈的使用。 C++版本 #include <iostream> #include <vector> #include <stack> #include <algorithm> using namespace std; // 定义数据栈 stack<int> stack1; // 定义辅助栈
阅读全文
摘要:本体考察数组的使用。注意本体使用vector的指针形式。 C++版 #include <iostream> #include <vector> #include <algorithm> using namespace std; void printMatrixInCircle(vector<vect
阅读全文
摘要:考察二叉树的遍历。判断前序遍历,与新增的前->右->左遍历结果是否一致。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义二叉树 struct TreeNode{ int val; struct Tree
阅读全文
摘要:考察二叉树的遍历。镜像对称,本解法使用的是前序遍历。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义二叉树 struct TreeNode{ int val; struct TreeNode* left
阅读全文
摘要:考察二叉树的遍历。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义二叉树 struct TreeNode{ int val; struct TreeNode* left; struct TreeNode
阅读全文
摘要:考察链表的操作,合并两个有序链表,合并后的链表仍是有序的。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义链表 struct ListNode{ int val; struct ListNode* ne
阅读全文
摘要:考察链表的操作,将单向链表反转,返回头节点。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义链表 struct ListNode{ int val; struct ListNode* next; Lis
阅读全文
摘要:考察链表的操作,找到单向链表中环的入口节点 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义链表 struct ListNode{ int val; struct ListNode* next; List
阅读全文
摘要:考察链表的操作,注意使用一次遍历。相关题目:求链表的中间节点。 C++版 #include <iostream> #include <algorithm> using namespace std; // 定义链表 struct ListNode{ int val; struct ListNode*
阅读全文
摘要:考察字符串匹配:这个题目的指针运用特别有意思。注意第30行代码,传递的是数组的地址,那么在函数中就有可能改变当前指针的地址,后面再使用*str就可能不会再指向数组首位了。 C++版 #include <iostream> #include <algorithm> using namespace st
阅读全文
摘要:考察字符串匹配:正则表达式。 C++版 #include <iostream> #include <algorithm> using namespace std; bool matchCore(char str[], char pattern[]){ if(*str == '\0' && *patt
阅读全文
摘要:本题考查链表的操作。 C++版本 // 由于可能需要删除头结点,所以需要指向头结点的指针,即二级指针,有两种方式 // 方式一:参数声明为二级指针 ListNode** pHead; // 方式二:新建指向头结点的指针 ListNode* vHead = new ListNode(-1); vHea
阅读全文
摘要:本题考查大数问题。大数一般用字符串或者数组表示。注意,strlen()函数返回的值是数组'\0'前元素的个数,并不包括'\0'。 C++版本 #include <iostream> #include <algorithm> #include <cstring> using namespace std
阅读全文
摘要:本题考查大数问题。大数一般用字符串或者数组表示。注意,strlen()函数返回的值是数组'\0'前元素的个数,并不包括'\0'。 C++版本 #include <iostream> #include <algorithm> #include <cstring> using namespace std
阅读全文
摘要:本题考查大数问题。大数一般用字符串或者数组表示。注意,strlen()函数返回的值是数组'\0'前元素的个数,并不包括'\0'。 C++版本 #include <iostream> #include <algorithm> #include <cstring> using namespace std
阅读全文
摘要:本题考查库函数的实现原理,特别注意用O(logn)时间求a的n次方的优化算法。 C++版 #include <iostream> #include <cmath> using namespace std; bool g_InvalidInput = false; double powerWithUn
阅读全文