C++ Data-structure and Algorithm
stsfang
这个作者很懒,什么都没留下…
展开
-
shell通配符字符串匹配
在Linux Shell命令下通配符’‘表示0个或多个字符, 现编写一段代码实现通配符’‘的功能,注意只需要实现’*’, 不用实现其他通配符。 输入描述: 第一行输入通配字符串 第二行输入要匹配查找的字符串 输出描述: 输出所有匹配的字串起始位置和长度,每行一个匹配输出 如果不匹配,则输出 -1 0 如果有多个按照起始位置和长度的正序输出。 输入例子1: shopee*.com shopeemobile.com 输出例子1: 0 16 例子说明1: 0 起始位置,16长度 输入例子2: *.com shop原创 2021-03-28 01:15:37 · 2641 阅读 · 0 评论 -
最小距离和
xxx物流会有很多个中转站。在选址的过程中,会选择离用户最近的地方建一个物流中转站。 假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0。找到一个空地修建一个物流中转站,使得这个物流中转站到所有的房子的距离之和最小。 能修建,则返回最小的距离和。如果无法修建,则返回 -1。 (1) 若范围限制在100*100以内的网格,如何计算出最小的距离和? (2) 当平面网格非常大的情况下,如何避免不必要的计算? 输入描述: 4 0 1 1 0 1 1 0 1 0 0 1 0 0 0 0 0原创 2021-03-28 00:16:48 · 304 阅读 · 0 评论 -
DFS终于完胜BFS了
xxxxx的办公室非常大,小xx同学的位置坐落在右上角,而大门却在左下角,可以把所有位置抽象为一个网格(门口的坐标为0,0),小xx同学很聪明,每次只向上,或者向右走,因为这样最容易接近目的地,但是小虾同学不想让自己的boss们看到自己经常在他们面前出没,或者迟到被发现。他决定研究一下如果他不通过boss们的位置,他可以有多少种走法? 输入描述: 第一行 x,y,n (0<x<=30, 0<y<=30, 0<=n<= 20) 表示x,y小虾的座位坐标,n 表示boss的原创 2021-03-28 00:04:40 · 204 阅读 · 0 评论 -
剑指offer(面试题14): 动态规划和贪心算法求解最优化问题
题目 给定一长为n的绳子,要求把绳子剪成m段(m,n都是整数且n>1,m>1),每段绳子的长度记为k[0], k[1], k[2]…,k[m]。请问k[0]*k[1]*k[2]….*k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,可以剪成2*3*3的三段得到最大的乘积。 解法 动态规划 从下往下分析问题,从下往上解决问题。先计算当绳子长度为2,3,4等这些较小的容易看...原创 2018-07-28 11:18:19 · 644 阅读 · 1 评论 -
剑指offer(面试题27):镜像二叉树
/* * 镜像二叉树 * 相关方法:先序遍历 */ #include <iostream> using namespace std; struct BinaryTreeNode { int value; BinaryTreeNode* left; BinaryTreeNode* right; BinaryTreeNode(int value):...原创 2018-08-01 21:30:18 · 128 阅读 · 0 评论 -
剑指offer(面试题27):对称二叉树
/* * 判断一个二叉树是不是对称二叉树 */ #include&lt;iostream&gt; using namespace std; struct BinaryTreeNode { int value; BinaryTreeNode* left; BinaryTreeNode* right; BinaryTreeNode(int value):left(...原创 2018-08-01 21:59:37 · 114 阅读 · 0 评论 -
剑指offer(面试题29):顺时针打印矩阵
/* * 顺时针打印矩阵 * 注意矩阵的维度 */ #include&amp;amp;lt;iostream&amp;amp;gt; using namespace std; //当n_s == n_e 或者 m_s == m_e 说明已经打印到最后一列或者最后一行了 void printMatrixClockwisely(int **matrix, int m, int n) { int m_s = 0, m_e...原创 2018-08-01 23:22:55 · 135 阅读 · 0 评论 -
剑指offer(面试题31):栈的压入和弹出序列
/* * 给定两个序列,一个是栈的压入序列,一个是弹出序列,判断弹出序列能否匹配压入序列 */ #include<iostream> #include<stack> using namespace std; bool isPopOrderAccurate(int pushOrder[], int popOrder[], int count) { stack&...原创 2018-08-02 00:22:34 · 156 阅读 · 0 评论 -
剑指offer(面试题33):二叉搜索树的后序遍历序列
/* * 判断输入序列是否构成二叉搜索树的后序遍历 * 方法:递归 * 技巧:后序遍历的规律,根结点在最后一个,根据根结点可以将后序遍历序列分为 * 左子树和右子树 */ #include&lt;iostream&gt; using namespace std; bool isSquenceOfBST(int sequence[], int length) { if(se...原创 2018-08-02 10:51:25 · 179 阅读 · 0 评论 -
剑指offer(面试题34):二叉树中和为某一值的路径
/* * 给定一个整数sum,找出二叉树路径上的结点值的总和等于sum的所有路径 * 方法:先序遍历 + 递归 + 栈 */ #include<iostream> #include<vector> using namespace std; struct BinaryTreeNode { int value; BinaryTreeNode* left;...原创 2018-08-02 12:31:41 · 312 阅读 · 0 评论 -
剑指offer(面试题35):复杂链表的复制
/* * 复杂链表的复制 * 复杂链表是指,结点的指针可能不规则地指向另一个结点 */ #include<iostream> using namespace std; struct ComplexListNode { int value; ComplexListNode* next; ComplexListNode* pSibling; Compl...原创 2018-08-02 22:52:06 · 155 阅读 · 0 评论 -
剑指offer(面试题36):二叉搜索树和双向链表
/* * 实现二叉搜索树和排序双向链表的转换 * */ #include<iostream> using namespace std; struct BinaryTreeNode { int value; BinaryTreeNode* left; BinaryTreeNode* right; BinaryTreeNode(int value):l...原创 2018-08-03 01:49:57 · 129 阅读 · 0 评论 -
剑指offer(面试题37):序列化二叉树和反序列重建二叉树
// 序列化二叉树 #include&lt;iostream&gt; #include &lt;fstream&gt; #include &lt;sstream&gt; #include &lt;string&gt; using namespace std; struct BinaryTreeNode { int value; BinaryTreeNode* l原创 2018-08-03 11:38:15 · 174 阅读 · 0 评论 -
剑指offer(面试题38):字符串的排列
分析: 求字符串中所有字符的全排列,实际上按照全排列的计算公式来理解,第一步是求出所有可能出现在第一个位置的字符,即用首个字符分别后余下的字符交换;第二步是固定首个字符,余下字符组成的子串进行第一步的计算。实际上这就是一个递归的过程。 /* * 输入一个字符串,打印字符串中的字符组成的全部组成序列(全排列) */ #include<iostream> #include<...原创 2018-08-03 12:23:39 · 252 阅读 · 0 评论 -
剑指offer(面试题11):旋转数组的最小数字
题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如{3,4,5,1,2,}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 解题思路 直观的做法是遍历一次,时间复杂度为O(n)O(n)O(n) 注意到排序数组的一个旋转在分段上是有序的这一特点,可以使用二分法查找最小元素 #include <...原创 2018-07-28 01:10:34 · 87 阅读 · 0 评论 -
C++:链表的简单插入和删除
#include <iostream> using namespace std; struct ListNode { int value; ListNode* next; }; void addToDetail(ListNode** pHead, int value) { ListNode* pNew = new ListNode(); pNew->valu...原创 2018-07-27 17:09:05 · 496 阅读 · 0 评论 -
C++ 基于类的n皇后问题
C++ 皇后问题原创 2016-08-01 23:29:50 · 379 阅读 · 0 评论 -
C++ 基于类的String实现
一个简单的String类,能将list单向链表转化成String对象进项String的操作。在写比较函数时可以充分利用C字符串转换函数将String对象的比较转换成C字符串的比较,简化了代码的书写。原创 2016-08-07 00:10:31 · 233 阅读 · 0 评论 -
剑指offer(面试题17):打印从1到最大的n位数
题目 输入数字n,按顺序打印从1奥最大的n位十进制整数。比如输入3,则打印出1,2,3一直到最大的3位数999 解法 分析:这道题的陷阱是容易忽略掉n为大数的情况,当n为大数时只能使用大数算法。一般用字符串或数组表示大数。 #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;iostream&amp;gt; #include &amp;lt;string.h&原创 2018-07-28 15:40:23 · 365 阅读 · 0 评论 -
剑指offer(面试题18):删除有序链表中的重复结点
/* * 在一个排序的链表中,删除重复的结点(意味着连续出现相同的结点,这些的结点全部删除) * 1. 注意头结点可能被删除,因此函数参数声明中应该使用二级指针指向头结点所在的指针 * 2. */ #include <iostream> using namespace std; struct ListNode { int value; ListNode* next; };...原创 2018-07-28 16:41:43 · 200 阅读 · 0 评论 -
剑指offer(面试题20):表示数值的字符串
解法 分析:确定数值的匹配模式 注意:二级指针的使用容易出错 /* * 判断输入的字符串是否表示数值 * [+|-][.[0-9]][e|E[0-9]] */ #include <iostream> using namespace std; // 扫面[0-9] bool scanUnsignedInteger(const char** str) { const cha...原创 2018-07-28 17:16:25 · 182 阅读 · 0 评论 -
剑指offer(面试题21):根据给定条件划分数组
/* * 题目 * 输入一个数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分 * 偶数位于数组的后半部分 * 同时考虑代码的可扩展行 */ #include <iostream> using namespace std; // 不考虑可扩展性 void ReorderOddEven(int* pData, unsigned int length) { ...原创 2018-07-28 23:32:25 · 151 阅读 · 0 评论 -
剑指offer(面试题22):找出链表中倒数第K个结点
/* * 题目:找出单向链表的倒数第k个结点的值 * 要求:最多遍历一次链表 */ #include <iostream> using namespace std; struct ListNode { int value; ListNode* next; }; 分析:只用一次遍历找到倒数的第K个结点,需要维护两个指针,保持前面的指针比后面的指针领先k-1个结点,当前面的指...原创 2018-07-28 23:59:23 · 108 阅读 · 0 评论 -
剑指offer(面试题23):链表中环的入口结点
/* * 题目:如果一个单向链表包含环,如何找出环的入口结点。 * */ #include <iostream> using namespace std; struct ListNode { int value; ListNode* next; }; 分析:先检查链表是否存在环路,然后使用两个指针一前一后定位到入口结点。 // 检查是否存在环 ListNode* ...原创 2018-07-29 00:30:11 · 111 阅读 · 0 评论 -
剑指offer(面试题24):反转链表
/* * 题目:反转链表 */ #include <iostream> using namespace std; struct ListNode { int value; ListNode* next; }; ListNode* reverseList(ListNode* pHead) { if(pHead == NULL) return NULL; L...原创 2018-07-29 00:57:22 · 114 阅读 · 0 评论 -
剑指offer(面试题26):树的子结构
/* * 题目:输入两颗二叉树A和B,判断B是不是A的子结构。 */ #include &lt;iostream&gt; using namespace std; struct Node { int value; Node* left; Node* right; }; 分析 // 注意:double在计算机中的比较是有误差的,需要给定允许的误差范围 bool equal...原创 2018-07-29 01:35:46 · 145 阅读 · 0 评论 -
剑指offer(面试题39):数组中出现次数超过数组长度一半的数字
方法1: 从数学角度看,所求的数一定的原数组(有序化)的中位数,那么,我们可以通过对数组排序,这样得到的时间复杂度是O(nlogn)O(nlogn)O(nlogn)。而如果能够优化到在O(n)O(n)O(n)的时间内找到,就更好了。基于快速排序的partition阶段,如果我们可以通过这一方法找到数组的中位数,那么时间复杂度显然是O(n)O(n)O(n)的。 #include<ios...原创 2018-08-03 18:10:18 · 140 阅读 · 0 评论 -
剑指offer(面试题40):数组中最小的K个数
#include&lt;iostream&gt; #include&lt;stdlib.h&gt; using namespace std; int randomInRange(int start, int end) { return rand() % (end - start + 1) + start; } void swap(int&amp; n1, int&amp; n...原创 2018-08-03 23:00:23 · 178 阅读 · 0 评论 -
剑指offer(面试题42):连续子数组的最大和
方法1:贪心算法 // 求数组中的所有子数组的最大和 #include<iostream> using namespace std; bool isInputValid = true; int findMaxSumOfSubArray(int * numbers, int length) { if(numbers == NULL || length <= 0)...原创 2018-08-04 00:37:02 · 219 阅读 · 0 评论 -
C++ 基于类的单向链表实现
C++ 单链表原创 2016-08-03 17:07:17 · 539 阅读 · 0 评论