算法基础
文章平均质量分 69
个人学习记录
阿怪zz
这个作者很懒,什么都没留下…
展开
-
二叉树的遍历(C++)
文章目录1、先序遍历2、中序遍历3、后序遍历以如下二叉树为例:1、先序遍历【遍历过程】a.访问根结点;b.先序遍历其左子树;c.先序遍历其右子树。先序遍历序列为:ABDEFCGH【代码】//前序遍历 void GetPreOT(int bt){ if(bt == -1) return ; else{ cout << T[bt].Data; GetPreOT(T[bt].Left); GetPreOT(T[bt].Right); }}2、中序遍历【原创 2021-03-22 21:30:23 · 2696 阅读 · 0 评论 -
STL 之 bitset
bitset本文来自博客:https://ac-fun.blog.csdn.net/article/details/113939257简介bitset 模板类由若干个位(bit)组成,它提供一些成员函数,使程序员不必通过位运算就能很方便地访问、修改其中的任意一位。bitset 模板类在头文件 #include<bitset> 中。bitset 可看作一个 多位二进制数,每 8 位占用 1 个字节,相当于采用了状态压缩的二进制数组,并支持基本的位运算。在估算程序运行的时间时,我们一般以 3原创 2021-03-14 20:36:23 · 640 阅读 · 0 评论 -
【C语言】 itoa()函数 和 atoi()函数(字符串与整型数的转换)
文章目录一、atoi()函数二、itoa()函数三、利用atoi() 和itoa()函数进行进制转换一、atoi()函数atoi()是C语言中的字符串转换成整型数的一个函数(1)【头文件】#include <stdlib.h>(2)【函数原型】int atoi (const char * str);(3)【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等),直到遇上数字或正负符号才开始做转换,而再遇到 非数字 或 字符串结束时(’\0’原创 2021-03-11 21:44:08 · 48265 阅读 · 1 评论 -
【C++】c_str()函数
c_str()函数c_str()函数是C++中 string 类中的函数,其头文件为:#include <string>,它是将C++的 string 转化为C的字符串数组,即 string 与 const char* 之间的转换。如:#include <iostream>#include <string>using namespace std;int main(){ const char* c; string s = "abcd"; c = s.c_s原创 2021-03-11 20:44:53 · 5528 阅读 · 0 评论 -
栈的应用之前、中、后缀表达式(C++)
一、表达式求值表达式求值是程序设计语言编译的一个最基本的问题。它的实现是栈应用的又一典型例子。仅以算术表达式为例:1.算术表达式的组成将表达式视为由操作数、运算符、界限符(称为单词)组成。【操作数】:常数、变量或符号常量。【算符】:运算符、界限符。2.算术表达式的形式(1)中缀(infix)表达式——表达式的运算符在操作数的中间。即:<操作数><操作符><操作数>  原创 2021-03-10 21:33:25 · 1980 阅读 · 7 评论 -
STL之元素排列next_permutation 、prev_permutation(C++)
文章目录排列函数有关说明函数的使用1、基础使用2、元素的全排列3、自定义排序拓展排列函数有关说明元素的排列,就是我们在数学中学到的的排列,在C++ 的STL中为我们提供了内置的全排列函数 next_permutation() 和 prev_permutation(),函数原型如下:bool next_permutation(BidirectionalIterator beg, BidirectionalIterator end) bool prev_permutatio原创 2020-12-23 19:14:54 · 485 阅读 · 0 评论 -
STL之sort排序(C++)
文章目录一、sort()函数的说明二、sort()函数的使用方法1、自定义排序准则(常用)(1)简单数组排序(2)结构体排序2、使用sort()函数的内置比较函数3、重载结构体(1)在结构体内部重载(2)在结构体外部重载一、sort()函数的说明排序函数 sort(),其时间复杂度平均为O(N·lg(N)),使用时需声明其头文件 #include <algorithm> 及 using namespace std .STL中的sort()并非只是普通的快速排序,除了对普通的快速排序进行原创 2020-12-17 19:46:04 · 1392 阅读 · 0 评论 -
STL之链表list(C++)
文章目录1、链表(list)的定义(1)list 在头文件中的定义(2)有关 list 的几点说明2、链表(list)的常用方法用法示例1、链表(list)的定义链表(list)是一个双向链表,可高效地进行插入删除元素。如图,list的结构:(1)list 在头文件中的定义运用 list, 必须声明请头文件:#include <list>。list 类型定义于 namespace std 中,是个 class template:namespace std{template <原创 2020-12-12 15:44:34 · 1696 阅读 · 0 评论 -
STL之数据结构链表
文章目录1、链表——线性表的链式表示(1)单链表(2)循环链表(3)双向链表2、单链表的应用(1)破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),UVa 11988)题目描述问题分析代码1、链表——线性表的链式表示线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。(1)单链表对于元素 ei 来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息(即直接后继的存储位置)。这原创 2020-12-11 20:07:28 · 697 阅读 · 0 评论 -
STL之优先队列priority_queue(C++)
文章目录1、优先队列(priority_queue)的定义2、元素自定义类型的优先队列(priority_queue)3、优先队列(priority_queue)的主要成员函数(1)优先队列主要的三个成员函数1、优先队列(priority_queue)的定义优先队列是一种抽象数据类型,其元素根据优先级被读取。运用 priority_queue, 必须声明请头文件:#include <queue>。priority_queue 声明:如声明一个元素类型为整型的 priority_queue原创 2020-12-10 20:34:57 · 553 阅读 · 0 评论 -
STL之队列queue(C++)
文章目录1、队列(queue)的定义2、队列的两种存储表示(1)链队列——队列的链式表示(2)循环队列——队列的顺序表示1、队列(queue)的定义队列(queue)是一种先进先出( FIFO) 的线性表。它只允许在表尾进行插入,而在队头删除元素。运用 queue, 必须声明请头文件:#include <queue>。queue 声明:如声明一个元素类型为整型的 queue:queue<int> st;2、队列的两种存储表示(1)链队列——队列的链式表示(2)循环队列原创 2020-12-09 20:27:58 · 2025 阅读 · 0 评论 -
STL之栈stack(C++)
文章目录1、栈的定义1、栈的定义栈(stack)是限定在表尾进行插入或删除操作的线性表。如图a,表尾称为栈顶,表头端称为栈底。栈修改的原则为:后进先出。原创 2020-12-09 16:08:07 · 1393 阅读 · 0 评论 -
STL之map映射(C++)
文章目录1、map 是一个键值对(1)有关 key / value(3)底层实现——红黑树2、map的常用方法(1)注意(2)用法示例3、set的应用安迪的第一个字典(Andy's First Dictionary,Uva 10815)题目描述问题分析代码关于 stringstream1、map 是一个键值对 就是从键(key)到值(value)的映射,比如⼀个人名对应⼀个学号,map 将(key / value)当做元素,它可以根据 key 从小到大的排序准则自动将元素排序,且map的元素唯一。使用原创 2020-12-08 16:01:24 · 606 阅读 · 0 评论 -
STL之set集合(C++)
文章目录1、set是一个关联式容器(1)关于关联式容器(2)元素唯一性(3)底层实现——红黑树2、set的常用方法(1)注意(2)用法示例1、set是一个关联式容器 set 需声明头文件 #include <set>(1)关于关联式容器 STL容器大的方向分为两类,序列式容器 和 关联式容器,这两者通过数据在容器内的排列来区分,关联容器 是通过 键(key) 存储和读取元素的,而 顺序容器 则通过元素在容器中的 位置顺序 存储和访问元素。标准的STL序列容器包括:vector、li原创 2020-12-05 16:12:22 · 1102 阅读 · 0 评论 -
STL之不定长数组vector(C++)
vector是一个不定长数组它把一些常用操作“封装”在了vector类型内部。例如,若a是一个vector,可以用a.size( )读取它的大小,a.resize( )改变大小,a.push_back( )向尾部添加元素,a.pop_back( )删除最后一个元素。vector是一个模板类,所以需要用vector <int> a或者vector <double> b这样的方式来声明一个vector。vector <int>是一个类似于int a[]的整数数组,而vect原创 2020-11-30 19:47:29 · 2437 阅读 · 0 评论 -
广度优先搜索(BFS)C++
广度优先搜索(BFS)宽度优先搜索(BFS,Breadth-First Search)也是搜索的手段之一。宽度优先搜索是先搜索距离初始状态近的状态。也就是说,它是按照开始状态→只需1次转移就可以到达的所有状态→只需2次转移就可以到达的所有状态→……这样的顺序进行搜索宽度优先搜索利用了队列进行计算,队列(Queue)支持push和pop两个操作,数据元素先进先出。其头文件为:#include <queue>例题:迷宫的最短路径题目描述给定一个大小为 N×M 的迷宫。迷宫由通道和墙壁组成原创 2020-10-12 15:25:35 · 554 阅读 · 0 评论 -
深度优先搜索(DFS)C++
深度优先搜索(DFS)深度优先搜索是搜索的手段之一。它是从某个状态开始,不断转移状态,直到无法转移,然后退回到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终解。深度优先搜索(隐式的)利用了栈进行计算,栈(Stack)支持push和pop两种操作,数据元素先进先出。例题:Lake Counting (POJ No.2386)题目描述有一个大小为N * M 的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通指的是下图中相对 W 的 * 的部分)原创 2020-10-12 10:19:35 · 504 阅读 · 0 评论 -
动态规划:最长公共子序列问题 (C++)
动态规划:最长公共子序列问题动态规划的一般步骤:问题结构分析给出两个序列X[n],Y[m],求X[n],Y[m]的最长公共子序列的长度C[n][m]递推关系建立用一个具体的例子来分析序列末尾字符:情况1:X[n],Y[m]末尾字符不同情况2:X[n],Y[m]末尾字符相同先来看情况1:X[n],Y[m]末尾字符不同,情况1有两种可能:(1)去掉Y[m]末尾字符,即C[7][6-1]+0:(2)去掉X[m]末尾字符,即C[7-1][6]+0:所以递归关系为:C[i,j]=原创 2020-10-11 21:29:23 · 2466 阅读 · 1 评论 -
动态规划:0-1背包问题 (C++)
动态规划:0-1背包问题动态规划的一般步骤:问题结构分析递推关系建立自底向上计算最优方案追踪例题 0-1背包问题(题目来源:https://www.acwing.com/problem/content/description/2/)题目描述有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数 N,V,用空格隔开,分原创 2020-10-10 10:40:15 · 622 阅读 · 0 评论 -
由数据范围反推算法复杂度以及算法内容(转载)
由数据范围反推算法复杂度以及算法内容作者:yxc链接:https://www.acwing.com/blog/content/32/来源:AcWing 著作权归作者所有。一般ACM或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在 10^7 为最佳。下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:...转载 2020-10-09 22:15:54 · 182 阅读 · 0 评论 -
分而治之:快数排序
分而治之:快数排序从归并排序到快速排序:归并排序:简化分解,侧重合并快速排序:侧重分解,简化合并快速排序的分解:快速排序侧重分解过程,其分解的主要方法是数组划分。数组划分:基本思想:任选元素x作为分界线,称为主元(pivot)交换重排,满足x左侧元素小于右侧实现方法:选取固定位置主元x(一般是首元素或尾元素)维护两个部分的右端点变量i,j考察数组元素A,只和主元比较若A[j] ≤ x,则交换 A[j] 和 A[i+1] ,i与j右移;若A[j] > x,则j原创 2020-10-06 20:52:57 · 255 阅读 · 0 评论 -
分而治之:逆序对计数问题
分而治之:逆序对计数问题问题:输入一个长度长度为n的数组A[n],求出数组A[n]逆序对的总数。输入:长度为n的数组A[n]输出:数组A[n]逆序对的总数问题分析:把数组A二分为两个子数组A[1…n/2],A[n/2 + 1…n]递归求解子问题求解S1∶仅在A[1…n/2]中的逆序对数目求解S2∶仅在A[n/2+1…n]中的逆序对数目合并A[1…n/2]和A[n/2 +1…n]的解求解S3∶跨越子数组的逆序对数目S = S1+S2+S3...原创 2020-10-06 11:40:51 · 3054 阅读 · 0 评论 -
分而治之:最大子数组问题
分而治之(一):最大子数组问题问题:给出一个数组,找到一个子数组(连续的),使得该子数组的元素和是最大的。输入:给定一个数组X[1…n],对于任意一对数组下标为l,r(l≤r)的非空子数组,其和记为S(l,s).输出:求出S(l,s)的最最值,记为Smax .问题分析将数组X[1…n]分为X[1…n/2]和X[n/2 +1…n]递归求解子问题S1∶数组X[1…n/2]的最大子数组S2∶数组X[n/2+1…n]的最大子数组合并子问题,得到SmaxS3∶跨中点的最大子数组数组X的原创 2020-10-05 19:08:54 · 870 阅读 · 0 评论 -
分而治之: 归并排序
归并排序原创 2020-10-03 15:49:11 · 311 阅读 · 0 评论 -
【C++】二分查找及例题
二分查找引例:A心里想一个1-1000之间的数,B来猜,可以问问题,A只能回答是或否。怎么猜才能问的问题次数最少?顺序查找:是1吗?是2吗? …是999吗?平 均要问500次二分查找:大于500吗?大于750吗?大于625吗? … 每次缩小猜 测范围到上次的一半,只需要10次二分查找的内容必须是有序的。例1:写一个函数BinarySeach,在包含size个元素的、从小到大排序的int数组a里查找元素p,如果找到,则返回元素下标,如果找不到,则返回-1。要求复杂度O(log(n))。代原创 2020-09-28 20:39:57 · 1187 阅读 · 0 评论 -
简单排序(冒泡排序、选择排序、插入排序)
简单排序(冒泡排序、选择排序、插入排序)“例题:编程接收键盘输入的若干个整数,排序后从小到大输出。先输入一个整数n,表明有n个整数需要排序,接下来再输入待排序的n个整数”。(1)选择排序(O(n^2))如果有N个元素需要排序,那么首先从N个元素中找到最小的那个(称为第O小的)放在第0个位子上(和原来的第0个位子上的元素交换位置),然后再从剩下的N-1个元素中找到最小的放在第1个位子上,然后再从剩下的N-2个元素中找到最小的放在第2个位子上……直到所有的元素都就位。代码void Select原创 2020-09-28 20:08:07 · 177 阅读 · 0 评论