剑指offer练习

  • 均为牛客网通过源码

数组

1、二维数组中的查找 SearchMatrix.cpp
2、替换空格 ReplaceSpace.cpp
3、旋转数组的最小数字MinNumberInRotatedArray.cpp
4、斐波那契数列Fibonacci.cpp
5、青蛙跳台阶jumpFloor.cpp
6、变态跳台阶jumpFloorII.cpp
7、连续子数组的最大和FindGreatestSumOfSubArray.cpp
8、把数组排成最小的数PrintMinNumber.cpp
9、数组中的逆序对InversePairs.cpp
10、数字在排序数组中出现的次数GetNumberOfK.cpp
11、调整数组顺序使奇数位于偶数前面reOrderArray.cpp
12、数组中出现次数超过一半的数字MoreThanHalfNum_Solution.cpp
13、最小的K个数GetLeastNumbers_Solution.cpp
14、数组中重复的数 Duplication.cpp
15、整数中1出现的次数NumberOf1Between1AndN_Solution.cpp
16、二进制中1的个数NumberOf1.cpp
17、两个有序数组的第K大数find_kth.cpp
18、丑数GetUglyNumber_Solution.cpp
19、数值的整数次方Power.cpp
20、打印1到最大的n位数PrintNumber.cpp  


链表

1、从尾到头打印链表PrintList.cpp
2、在O(1)的时间删除链表结点DeleteNode.cpp
3、创建链表CreateList.cpp
4、链表中倒数第k个结点FindKthToTail.cpp
5、反转链表ReverseList.cpp
6、合并两个排序的链表MergeList.cpp
7、复杂链表的复制RandomListNode.cpp
8、两个链表的第一个公共结点FindFirstCommonNode.cpp


字符串

1、字符串的全排列Permutation.cpp
2、第一个只出现一次的字符FirstNotRepeatingChar.cpp
3、把字符串转换成正数(实现atoi函数)StrToInt.cpp
4、字符串的旋转词chkRotation.cpp
5、无重复字符的最长子字符串lengthOfLongestSubstring.cpp


二叉树  

1、二叉树的深度TreeDepth.cpp
2、二叉树的最小深度minDepth.cpp
3、求二叉树中的节点个数countNodes.cpp
4、二叉树第K层结点数getNodeNum.cpp
5、二叉树叶子节点个数GetLeafNodeNum.cpp
6、二叉树的下一个结点 GetNext.cpp
7、二叉搜索树的第k个结点Inorder.cpp
8、二叉树深度优先遍历DepthFirstTravel
9、二叉树按层次打印(广度优先)printTree.cpp
10、按之字形顺序打印二叉树Print.cpp
11、二叉树创建、前中后序遍历Tree.cpp
12、判断二叉搜索树的后序遍历序列VerifySquenceOfBST.cpp
13、重建二叉树(前序+中序)ReconstructBinaryTree.cpp
14、重建二叉树(后序+中序)buildTree.cpp
15、二叉树的镜像(变换)Mirror.cpp
16、对称的二叉树(判断)isSymmetrical.cpp
17、树的子结构HasSubtree.cpp
18、平衡二叉树IsBalanced_Solution.cpp
19、二叉树中和为某一值的路径FindPath.cpp
20、二叉搜索树与双向链表Convert.cpp
21、序列化二叉树Serialize.cpp
22、二叉树两个结点最低公共祖先findLCA.cpp  


动态规划

1、最长上升子序列LIS.cpp
2、最长公共子序列longest_common_subseq.cpp
3、最长公共子串longest_common_substring.cpp
4、最长回文子串getLongestPalindrome.cpp  


其他

1、顺时针打印矩阵printMatrix.cpp
2、包含min函数的栈StackWithMin.cpp
3、栈的压入、弹出序列IsPopOrder.cpp
4、用两个栈实现队列QueueWithTwoStacks.cpp
5、用两个队列实现栈StackWithTwoQueues.cpp
6、实现赋值运算符函数 operator.cpp
7、创建单例模式 CreateSingleton.cpp
8、线程安全单例模式CSingleton.cpp