随笔分类 - 剑指Offer
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。 1 bool isPostOrder(vector&num, int left, int right) 2 { 3 if (left == right) 4 ret...
阅读全文
摘要:题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如: 3 / \ 9 20 / \ 15 7 输出:3、9、20、15、7这道题跟leetcode中的按层序打印有所不同,leetcode中要求每一层输出为一行,而本题中没有此要求,因此简单的多。...
阅读全文
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列表示是否为该栈的弹出顺序。 1 bool isPopOrder (vector&push, vector&pop) 2 { 3 int n = push.size(); 4 if ( n == 0 || n!=pop....
阅读全文
摘要:题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入以下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16 1 void pri...
阅读全文
摘要:题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:struct BinaryTreeNode{ int val; BinaryTreeNode* left; BinaryTreeNode* right;};例如下图中的两棵树,由于A中有一部分树的...
阅读全文
摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然时按照递增排序的。链表结点定义如下:struct ListNode{ int val; ListNode* next;};参见LeetNode-Merge Two Sorted Lists。
阅读全文
摘要:题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:1 struct ListNode2 {3 int val;4 ListNode* next; 5 };参见LeetNode-Reverse Linked List。
阅读全文
摘要:题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值一次是1、2、3、4、5、6.这个链表的倒数第3个结点是值为4的结点。链表结点定义如下:struct ListNode{ i...
阅读全文
摘要:题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,是的所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。初级程序员代码: 1 void reorderOddEven(vector&data) 2 { 3 unsigned int n = data.size(); 4 ...
阅读全文
摘要:题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:1 struct ListNode2 {3 int val;4 ListNode* next;5 };分析:如下图所示,假设要删除的结点为p结点,若直接删除p结点,则必须知道p的上一个结...
阅读全文
摘要:题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。考点:大数问题。解决方案:在字符串上模拟数字加法。《剑指Offer》上的代码太复杂,我自己的代码如下所示: void increment(string&str) { int n = ...
阅读全文
摘要:题目:实现函数double Power(double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解法一:全面但不够高效的解法需要注意的地方:指数为负数的情况。底数为0且指数为负数的情况。(无效输入)底数...
阅读全文
摘要:题目:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:解法一:动态规划 1 int fibonacci (int n) 2 { 3 if (n<=1) 4 return n; 5 int p = 0, q = 1, result = 0; 6 ...
阅读全文
摘要:题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。参见Leetcode-Find Minimum in Rotated Sorted ...
阅读全文
摘要:题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 1 template 2 class CQueue 3 { 4 public: 5 CQueue(); 6 ...
阅读全文
摘要:题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不包含重复的数字。根据前序和中序遍历结果重构二叉树,参见LeetCode-Construct Binary Tree from Preorder and Inorder Traversal。根据中序...
阅读全文
摘要:题目:输入一个链表的头结点,从尾到头反过来打印链表。链表结点定义如下:struct ListNode{ int val; ListNode* m_pNext; };思路:利用栈 1 void printListReverse(ListNode* pHead) 2 { 3 ...
阅读全文
摘要:题目:请实现一个函数,把字符串中的每个空格替换成”%20“。例如输入”We are happy.",则输出“We%20are%20happy."。 1 void replaceBlank(char string[], int length) 2 {//length为string的总容量 3 ...
阅读全文
摘要:解法一:只适用与单线程环境上述代码通过将构造函数定义为私有函数,并且只有在instance为空时才创建实例来确保只能创建一个实例。解法二:虽然在多线程环境中能工作但效率不高解法一存在的问题:在多线程环境下,如果两个线程同时进行if判断,并且instance的值为空,此时两个线程都会创建实例。解决方案...
阅读全文
摘要:题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。参见LeetCode-Search a 2D Matrix
阅读全文

浙公网安备 33010602011771号