数据结构与算法
C++语言,写数据结构与算法
qq_34732729
这个作者很懒,什么都没留下…
展开
-
记录C++11,auto遇到的坑
操作vector的时候,用迭代器,需要写好多代码,特别长。好在C++11 有了auto,然后就想着省事:通过扫描一遍vector,然后改变里面的值。直到遇到了bug, 才发现auto不能改变,只能遍历读取。#include<iostream>#include<vector>using namespace std;struct test{ int a; char c; bool flag = false;};int main(){ ..原创 2020-09-16 12:16:03 · 1179 阅读 · 2 评论 -
int转string,string转int,int转char, char转int
int转stringstring Int_to_String(int val){ string res; while(val > 0) { res += char(val%10 + '0'); val /= 10; } reverse(res.begin(), res.end()); // 最后记得反转 ...原创 2020-01-08 11:12:21 · 145 阅读 · 0 评论 -
动态规划——最短路径
题目:有一个n*n的矩阵WW[n][n],存储正整数 int WW[4][4] = {1,3,5,9,2,1,3,4,5,2,6,7,6,8,4,3};,棋子从左上角出发,到右下角,求经过的最短路径。矩阵中每个数值代表距离的长度。分析:从[0][0]到[n-1][n-1],每个阶段都有两种决策,向下或向右。1. 贪心算法一条路走到黑,只选择下一步中较小值。#def...原创 2019-10-19 16:57:59 · 9823 阅读 · 0 评论 -
动态规划——清空购物车
清空购物车是假的,算法是真的,教你如何最大程度的薅羊毛。淘宝双十一各种活动,比如:满200减50元。假如你的购物车有n个商品(n > 100),希望凑单200,且不会超过太多,最大限度的薅羊毛。身为程序员如何破?用回溯穷举所有排列组合,恐怕都赶不上双十一的秒杀了。把这个问题抽象出来,就是0-1背包问题,把重量换成钱的事。钱的事无小事。比如商品价钱如下:15, 30, 93, ...原创 2019-10-15 18:21:10 · 732 阅读 · 0 评论 -
动态规划——0-1背包问题
动态规划比较适合用来求解最优问题,比如求最大值、最小值等等。它可以非常显著地降低时间复杂度,提高代码的执行效率。1、0-1背包问题,回溯求解假设背包中有5个物品,重量分别是:2,2,4,6,3。先构建一个递归树,理解回溯算法。function(第i个物品,当前包的重量)#define maxWeight 9// 0-1背包问题,回溯求解// i-索引,从0开始。 cw-当前重...原创 2019-10-15 17:49:14 · 727 阅读 · 0 评论 -
标准库——string/char类型
关于标准库中sring、char、vector、set、map、queue、stack、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。// 包含头文件和声明#include<string>using std::string;// cstring 是 string.h 头文件的 C++ 版本,而 string.h 则是...原创 2019-09-06 09:42:54 · 274 阅读 · 0 评论 -
标准库——vector/list/deque类型
关于标准库中sring、vector、list、deque、set、map、queue、stack、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。vector、list、dqque都是顺序容器。vector 底层是用数组实现的,并且支持动态扩容,每次倍增为原size()的1.5倍或者2倍;支持快速随机访问。list 底层单链表实现...原创 2019-09-06 10:22:20 · 218 阅读 · 0 评论 -
标准库——bitset类型
关于标准库中sring、vector、set、map、queue、stack 、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。// 需要包含头文件和声明:#include<bitset>using std::bitset;bitset对象的定义和初始化bitset类型对象的区别仅在其长度,而不在其类型。定义时,&...原创 2019-09-06 11:13:53 · 372 阅读 · 0 评论 -
标准库——stack类型
关于标准库中sring、char、vector、set、map、queue、stack、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。栈,先进后出。栈容器支持的操作其实 stack 的方法很简单,但是在用的时候,会和 vector queue 的操作函数混淆,所以就记录一下。...原创 2019-09-06 14:39:07 · 511 阅读 · 0 评论 -
标准库——queue类型
关于标准库中sring、char、vector、set、map、queue、stack、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。队列,先进先出(FIFO)。包括queue、priority_queue。队列和优先级队列支持的操作注意区分 stack 和 queue 的操作函数的不同。...原创 2019-09-06 14:39:20 · 570 阅读 · 0 评论 -
标准库——关联容器 map、set、multimap、multiset
关于标准库中sring、char、vector、set、map、queue、stack、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。关联容器:支持通过键来高效地查找和读取元素。包括:map,set,其中,map:键-值,set:键。map 是 map<键, 值> 对的 集合,可以使用键作为下标来获取一个值。关联容器类...原创 2019-09-06 16:32:07 · 258 阅读 · 0 评论 -
标准库—— 关联容器 set、multimap、multiset
关于标准库中sring、char、vector、set、map、queue、stack、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。关联容器:支持通过键来高效地查找和读取元素。包括:map,set,其中,map:键-值,set:键。set 仅记录键,不记录值。无重复,键严格弱排序(从小到大,top小,back大)set<T&...原创 2019-09-06 17:35:25 · 184 阅读 · 0 评论 -
二分查找——三种模板(C++版本)
模板一:int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; int left = 0, right = nums.size() - 1; while(left <= right) { // ...转载 2019-09-09 16:26:16 · 2437 阅读 · 0 评论 -
BitMap算法
BitMap算法程序详细说明:C++语言中,char,1字节,8位,二进制 0000 0000所以,如果有10个数,需要存储,需要 new char[10/8+1],就是2个char,也就是16位二进制 0000 0000 0000 0000(此顺序类比 int arr[3] = {1,2,3}, arr[0] = 1,以下顺序,均为从左到右,没有按照上图的标准顺序)!!!...原创 2019-08-28 16:21:50 · 215 阅读 · 3 评论 -
拓扑排序——DFS
DFS算法拓扑排序,可以用深度优先搜索来实现,更确切的说,应该是深度优先遍历,遍历途中的所有顶点,而非只是搜索一个顶点到另一个顶点的路径。注意,此邻接表为逆邻接表。输入的时候需要注意。s —> t,输入时,应该是addEdge(t, s);然后递归处理每个顶点。对于顶点V来说,先输出祂可达到的所有顶点,也就是说,先把它依赖的所有顶点输出了,再输出自己。DFS中,每个顶点被访...原创 2019-08-28 10:49:22 · 2569 阅读 · 0 评论 -
CSpreadSheet.h 中 SQLGetInstalledDrivers(szBuf,cbBufMax,&cbBufOut) 函数调用崩溃问题
把CSpreadSheet.h 文件从开源社区下载下来,然后进行头文件和实现文件分离。添加各种头文件,修改各种属性设置,把字符串前添加 _T(),编译通过。然后测试:主函数如下:int _tmain(int argc, _TCHAR* argv[]){ CSpreadSheet SS("d:\\name1.xls", "Sheet1", false); // 此...原创 2019-03-25 17:09:19 · 535 阅读 · 0 评论 -
fopen函数的注解及自己工程的应用
从网上查找fopen()函数的用法,各种翻译,参差不齐(对错参半),还是自己翻译一遍,记录下来,更靠谱。参考链接:http://www.tutorialspoint.com/c_standard_library/c_function_fopen.htmhttp://www.cplusplus.com/reference/cstdio/fopen/FILE *fopen(const ...原创 2019-04-30 11:06:38 · 305 阅读 · 0 评论 -
C++中用时间为文件命名
Qt中的用法// 需要包含头文件#include<QDateTime>#include<QDate>const char *filename;QDateTime datetime = QDateTime::currentDateTime();//QString timestr = datetime.toString("yyyyMMddHHmmss");...原创 2019-05-10 17:10:10 · 2698 阅读 · 0 评论 -
VS2010的工程,需要把哪些文件打包,发给别人。
用VS2010编译好的文件,运行也没有问题,然后就想着可以共享给别人了。但是,这个大的一个demo包,到底哪些文件时必须的,哪些文件时可以删除的,我一直很困惑。今天有时间,就整理一下,防止自己忘记,方便后续查看。本demo是基于VS2010的MFC+FFmpeg制作的录屏软件。VS2010中各种类型文件的作用以及共享给别人时,需要保留的文件:.sln 相当于VC...原创 2019-05-10 18:05:44 · 7343 阅读 · 0 评论 -
贪心算法——找零钱、装豆子、分糖果、区间覆盖、霍夫曼编码等
一、找零钱根据实际情况,有1元、(2元的已经不流通了)、5元、10元、20元、50元、100元。当有人给出36524元时,如何找钱给对方。// 找钱的类class payMoney{public: payMoney(); ~payMoney(); int howManyCash(int waitToPay);private: int *arr;};// 初始化钱的种类...原创 2019-08-20 15:44:22 · 783 阅读 · 0 评论 -
回溯算法——八皇后问题
回溯算法的思想:每到一个十字路口A,就选择一条路走a,如果a走不通,则回到十字路口A,选择其他bcd之一,进行走。若依然走不通,则退回到A之前的十字路口,重复上面的操作。利用回溯算法解决的经典问题:数独、八皇后、0-1背包、图的着色、旅行商问题、全排列等等。八皇后问题。#include<iostream>using namespace std;static int ...原创 2019-08-24 15:06:07 · 191 阅读 · 0 评论 -
回溯算法——数独问题
回溯算法的思想:每到一个十字路口A,就选择一条路走a,如果a走不通,则回到十字路口A,选择其他bcd之一,进行走。若依然走不通,则退回到A之前的十字路口,重复上面的操作。利用回溯算法解决的经典问题:数独、八皇后、0-1背包、图的着色、旅行商问题、全排列等等。数独问题// 此方法有点问题,结果不对,稍后修改。#include<iostream>using namespa...原创 2019-08-27 13:16:38 · 1664 阅读 · 1 评论 -
分治算法——求逆序对、n个点中求最近的两个点的距离、快速求解两个矩阵的乘积
分治算法:分而治之。也就是将原问题划分为n个规模较小的子问题,并且结构与原问题相似,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。关于递归是否可以换成循环处理,我在处理实际问题的时候,试过,可行。所以还得要具体问题具体分析。一、求逆序对#include<iostream>using namespace std;static int num = 0; ...原创 2019-08-21 18:04:43 · 894 阅读 · 1 评论 -
回溯算法——0-1背包
回溯算法的思想:每到一个十字路口A,就选择一条路走a,如果a走不通,则回到十字路口A,选择其他bcd之一,进行走。若依然走不通,则退回到A之前的十字路口,重复上面的操作。利用回溯算法解决的经典问题:数独、八皇后、0-1背包、图的着色、旅行商问题、全排列等等。0-1背包问题#include<iostream>#define MAX_WEIGHT 100using nam...原创 2019-08-27 13:18:08 · 400 阅读 · 0 评论 -
单向链表,单项循环链表,双向链表
由于学习链表,所以,用C++写了单向链表,单项循环链表,双向链表,并进行了测试。均为无哨兵链表。欢迎大家测试,若发现错误,还请指出。以便我稍后改进。链接:https://github.com/hitskyer/course/tree/master/dataAlgorithm/dongyaxing/SingleCircleLink_file...原创 2019-03-23 17:22:49 · 1552 阅读 · 0 评论 -
拓扑排序——Kahn算法
Kahn算法#include <iostream>#include<vector>#include<list>using namespace std;// 图结构class Graph{public: int v; // 顶点个数 typedef vector<int>* node; node *adj; /...原创 2019-08-27 16:35:36 · 411 阅读 · 0 评论 -
广度优先搜索,深度优先搜索
广度优先搜索:深度优先搜索:深度优先搜索(Depth-First-Search),简称DFS。最直观的例子就是“走迷宫”代码中visited、queue、prev的解释如下:/** 广度优先搜索: 每个顶点都要进出一遍队列,每个边也都会被访问一次,所以 时间复杂度O(V+E) 主要消耗内存的是visited、prev数组、queue队列,所以...原创 2019-08-27 19:56:07 · 264 阅读 · 0 评论 -
C++中计算一段程序运行时间——clock()函数
如何知道一段程序的运行时间,其实比较简单,但是每次用,每次查, ̄□ ̄||||这次记录一下,方便以后自己查阅。***********************#include <iostream.h>#include <time.h> // 头文件还是需要包含的void main(){ clock_t start,finish; doubl...原创 2019-02-22 15:42:18 · 4449 阅读 · 0 评论