C++ Data-structure and Algorithm
stsfang
这个作者很懒,什么都没留下…
展开
-
shell通配符字符串匹配
在Linux Shell命令下通配符’‘表示0个或多个字符, 现编写一段代码实现通配符’‘的功能,注意只需要实现’*’, 不用实现其他通配符。输入描述:第一行输入通配字符串第二行输入要匹配查找的字符串输出描述:输出所有匹配的字串起始位置和长度,每行一个匹配输出如果不匹配,则输出 -1 0如果有多个按照起始位置和长度的正序输出。输入例子1:shopee*.comshopeemobile.com输出例子1:0 16例子说明1:0 起始位置,16长度输入例子2:*.comshop原创 2021-03-28 01:15:37 · 2772 阅读 · 0 评论 -
最小距离和
xxx物流会有很多个中转站。在选址的过程中,会选择离用户最近的地方建一个物流中转站。假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0。找到一个空地修建一个物流中转站,使得这个物流中转站到所有的房子的距离之和最小。 能修建,则返回最小的距离和。如果无法修建,则返回 -1。(1) 若范围限制在100*100以内的网格,如何计算出最小的距离和?(2) 当平面网格非常大的情况下,如何避免不必要的计算?输入描述:40 1 1 01 1 0 10 0 1 00 0 0 0原创 2021-03-28 00:16:48 · 325 阅读 · 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 · 236 阅读 · 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 · 673 阅读 · 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 · 138 阅读 · 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 · 123 阅读 · 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 · 164 阅读 · 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 · 178 阅读 · 0 评论 -
剑指offer(面试题33):二叉搜索树的后序遍历序列
/** 判断输入序列是否构成二叉搜索树的后序遍历* 方法:递归* 技巧:后序遍历的规律,根结点在最后一个,根据根结点可以将后序遍历序列分为* 左子树和右子树 */#include&lt;iostream&gt;using namespace std;bool isSquenceOfBST(int sequence[], int length) { if(se...原创 2018-08-02 10:51:25 · 207 阅读 · 0 评论 -
剑指offer(面试题34):二叉树中和为某一值的路径
/** 给定一个整数sum,找出二叉树路径上的结点值的总和等于sum的所有路径 * 方法:先序遍历 + 递归 + 栈 */#include<iostream>#include<vector>using namespace std;struct BinaryTreeNode { int value; BinaryTreeNode* left;...原创 2018-08-02 12:31:41 · 325 阅读 · 0 评论 -
剑指offer(面试题35):复杂链表的复制
/** 复杂链表的复制 * 复杂链表是指,结点的指针可能不规则地指向另一个结点 */#include<iostream>using namespace std;struct ComplexListNode { int value; ComplexListNode* next; ComplexListNode* pSibling; Compl...原创 2018-08-02 22:52:06 · 185 阅读 · 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 · 157 阅读 · 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 · 224 阅读 · 0 评论 -
剑指offer(面试题38):字符串的排列
分析:求字符串中所有字符的全排列,实际上按照全排列的计算公式来理解,第一步是求出所有可能出现在第一个位置的字符,即用首个字符分别后余下的字符交换;第二步是固定首个字符,余下字符组成的子串进行第一步的计算。实际上这就是一个递归的过程。/** 输入一个字符串,打印字符串中的字符组成的全部组成序列(全排列) */#include<iostream>#include<...原创 2018-08-03 12:23:39 · 260 阅读 · 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 · 99 阅读 · 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 · 527 阅读 · 0 评论 -
C++ 基于类的n皇后问题
C++ 皇后问题原创 2016-08-01 23:29:50 · 405 阅读 · 0 评论 -
C++ 基于类的String实现
一个简单的String类,能将list单向链表转化成String对象进项String的操作。在写比较函数时可以充分利用C字符串转换函数将String对象的比较转换成C字符串的比较,简化了代码的书写。原创 2016-08-07 00:10:31 · 260 阅读 · 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 · 375 阅读 · 0 评论 -
剑指offer(面试题18):删除有序链表中的重复结点
/** 在一个排序的链表中,删除重复的结点(意味着连续出现相同的结点,这些的结点全部删除)* 1. 注意头结点可能被删除,因此函数参数声明中应该使用二级指针指向头结点所在的指针* 2.*/#include <iostream>using namespace std;struct ListNode { int value; ListNode* next;};...原创 2018-07-28 16:41:43 · 296 阅读 · 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 · 213 阅读 · 0 评论 -
剑指offer(面试题21):根据给定条件划分数组
/** 题目* 输入一个数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分* 偶数位于数组的后半部分* 同时考虑代码的可扩展行*/#include <iostream>using namespace std;// 不考虑可扩展性void ReorderOddEven(int* pData, unsigned int length) { ...原创 2018-07-28 23:32:25 · 167 阅读 · 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 · 124 阅读 · 0 评论 -
剑指offer(面试题23):链表中环的入口结点
/** 题目:如果一个单向链表包含环,如何找出环的入口结点。**/#include <iostream>using namespace std;struct ListNode { int value; ListNode* next;};分析:先检查链表是否存在环路,然后使用两个指针一前一后定位到入口结点。// 检查是否存在环ListNode* ...原创 2018-07-29 00:30:11 · 135 阅读 · 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 · 144 阅读 · 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 · 172 阅读 · 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 · 149 阅读 · 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 · 206 阅读 · 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 · 230 阅读 · 0 评论 -
C++ 基于类的单向链表实现
C++ 单链表原创 2016-08-03 17:07:17 · 576 阅读 · 0 评论