数据结构与算法
文章平均质量分 67
Rui012345
love web
展开
-
剑指offer刷题(二)
1.题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy时间复杂度O(n) 思路:计算出字符串的长度,以及新字符串的长度(原长度+2*空格数),两个指针,一个指向新字符串结尾,一个指向原字符串结尾,从后到前赋值字符串,由于新字符串尾指针大于原字符串尾指针,所以不会产生覆盖,减...原创 2019-03-21 18:02:53 · 90 阅读 · 0 评论 -
字符串转为正数
class Solution {public: int StrToInt(string str) { int intnum = 0; int num = 1; int flag= 1;//1为正数,-1为负数 if(str.length() < 1) return 0; if(...原创 2019-05-24 15:24:36 · 712 阅读 · 0 评论 -
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
class Solution {public: // Parameters: // numbers: an array of integers // length: the length of array numbers // duplication: (Output) the duplicated n...原创 2019-05-24 15:36:05 · 620 阅读 · 0 评论 -
构建乘积矩阵
class Solution {public: vector<int> multiply(const vector<int>& A) { vector<int> res(A.size()); if(A.size() == 0) return vector<int>(); res[...原创 2019-05-24 16:22:29 · 233 阅读 · 0 评论 -
C++实现 在一个字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
C++中居然有和python字典一样的东西unordered_map(无序)、map (有序)先计算所有字母的频数,用unordered_map映射存储;接着,遍历str,找出unordered_map中value为1的keyclass Solution {public: int FirstNotRepeatingChar(string str) { ...原创 2019-05-18 11:10:36 · 1583 阅读 · 0 评论 -
丑数
列表res按序存储丑数res[0] = 1,下一个丑数产生规则:1.找出res所有数*2 中第一个大于 res [-1] 的数:res[n2]2.找出res所有数*3中第一个大于 res [-1] 的数 :res[n3]3.找出res所有数*5中第一个大于 res [-1] 的数 :res[n5]4.min(res[n2]*2,res[n3]*3,res[n...原创 2019-05-18 17:53:24 · 115 阅读 · 0 评论 -
逆序对个数
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%1...原创 2019-05-18 20:03:02 · 1249 阅读 · 1 评论 -
求链表第一个公共节点
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead...原创 2019-05-18 21:16:51 · 151 阅读 · 0 评论 -
扑克顺子
排序,0的个数(大小王个数),从最后一个0的下一个开始查找相邻元素的空缺总数,空缺总数大于0的个数:false;否则trueclass Solution {public: bool IsContinuous( vector<int> numbers ) { if(numbers.size()!= 5){ return false;...原创 2019-05-24 10:21:34 · 151 阅读 · 0 评论 -
1+2+3+4+....+n
不能加减乘除那就计算机最基础的 与、或、非、异或比如:a+b若b=0,返回a;异或运算:1^1 = 0,1^0=1,0^1=1,0^0=0若不考虑进位,加法结果就是a^b;若考虑进位,可以将上面的计算结果再加上进位,结果为最后输出进位的要求 1+1进位为1,0+1进位为0,1+0进位为0,0+0进位为0:很明显这就是&运算。输出为 (a^b)+(a&...原创 2019-05-24 11:17:39 · 3125 阅读 · 0 评论 -
剑指offer刷题(一)
【Vector、stack、queue】https://blog.csdn.net/u013846293/article/details/794102931.二叉树深度 int height(TreeNode* pRoot){ if(pRoot == NULL){ return 0; } int leftlen ...原创 2019-03-21 18:03:03 · 185 阅读 · 0 评论 -
线性表的顺序存储——顺序表
线性表可以按照其存储结构划分为顺序表、链表。如下图:顺序表:用一组地址连续的存储空间,存储表中的元素。则=可以看出有以下几个特点: 顺序表的描述:(1)数组静态分配#define Maxsize 30 typedef int ElemType;typedef stru原创 2017-09-12 20:28:44 · 434 阅读 · 0 评论 -
数据结构与算法——线性表(一)
数据结构之线性表原创 2016-09-11 00:03:54 · 300 阅读 · 1 评论 -
数据结构与算法——单链表(一)
数据结构与算法入门之单链表。原创 2016-09-11 16:02:08 · 368 阅读 · 0 评论 -
单链表实现查找中间结点
题目:用户输入x;随机生成X个元素,输出中间元素。若为奇数则输出中间,若为偶数输出中间两个数的平均值链表实现具体实现算法:(1)定义两个指针,首先将他们指向第一个元素(2)快慢指针,快指针p1是慢指针p2的2倍速度。相当于p1+2,p2++;(3)考虑可能是偶数个元素,快指针p1->next为空时,直接输出慢速度p2所指的元素,并跳出循环。原创 2016-09-20 01:50:17 · 926 阅读 · 0 评论 -
队列:出队、入队、销毁、清空等
具体的队列算法实现代码。将N个随机数入队。实现出队、再次入队、打印队列等方法。内存泄露是个大问题。记得free(p);p=NULLp指针本身是在栈上存储,不过p所指向的空间在堆上,所以需要程序员自行释放,防止内存泄露。free(p);之后p指针仍然存在,如果堆上原来指向的内存没有被重写,p还是可以的输出的,以防p所指向的内存重写,p相当于野指针,需要p=NULL;原创 2016-09-21 11:22:34 · 16124 阅读 · 0 评论 -
全排列递归算法
递归求全排列算法:例如:char a[]=”abc” ,(i,j,k)表示数组现有的元素perm(a,k,m);//从数组下标k到m的全排列k==m 只剩一个元素为递归出口C++源码:#include using namespace std;/*对数组元素全排列如 a[]="abc";结果为:abcacbbacbcacbacab*/原创 2016-10-04 13:40:22 · 529 阅读 · 0 评论 -
图___求无向图连通分量个数
一:求无向图连通分量个数 基于DFS,count计数。 从某一顶点出发遍历图,for循环,改变起始顶点,count计数void DFSTraverse(ALGraph G){ //深度遍历图 void DFS(ALGraph G,int i); int count=0; for(int i = 0; i < G.vexnum; i++) //初始化vi原创 2016-11-17 20:35:47 · 8779 阅读 · 1 评论 -
二叉树创建、先序遍历、中序遍历、后序遍历、树深度
一、概念:二叉树遍历:按指定的某条搜索路径访问树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。 根节点N,按照先遍历左子树L再遍历右子树R的原则,常见的有三种:先序(NLR)、中序(LNR)、后序(LRN)。其中,序是指根节点什么时候被访问。有时还有提到层序(按层遍历访问) 例如:下图原创 2016-09-30 23:03:34 · 575 阅读 · 0 评论 -
线性表常用算法合集
线性表常用算法合集 1:在一个递增的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉相同的元素,使得表中不再有重复元素。例如:(7,10,10,21,30,30,49,51)将变为(7,10,21,30,49,51)算法如下:LinkList DeleteSameElem(LinkList &L){ //表按增序排列,去掉相同元素,使得表中不再有相同元原创 2017-09-12 20:26:30 · 1907 阅读 · 0 评论 -
机器人的运动范围
vector二维初始化采用构造函数 vector<vector<int>> vec(10, vector<int>(8)); //10行8列,全部初始化为零class Solution { public: int movingCount(int threshold, int rows, int cols) { if(...原创 2019-06-22 16:38:50 · 126 阅读 · 0 评论