c语言
文章平均质量分 58
guiyumile
阿罗拉!!!
展开
-
【动态规划】背包问题
n 个物品,容量为V的背包Vi 体积 Wi 价值(权重)二:01背包每件物品最多只能用1次(要么0次,要么1次)集合划分:f(i,j)=Max(f(i-1,j),f(i-1,j-Vi)+Wi)三:完全背包每件物品都有无限次 四:多重背包每个物品最多有Si个五:分组背包n组,每组只能选1个(原先用二维数组表示状态,可以换成一维数组,用滚动数组(下一层只用到上一层来算,滚动交替计算)的方式。注:动态规划的优化,通常都是对代码或者状态转移方程,做等价变型)原创 2023-04-26 23:22:18 · 512 阅读 · 5 评论 -
【数学知识】一文学会算法中的数学知识(1.1)
一.数论1.质数在大于1 的整数,只包含1和本身这两个约数,则称为质数(素数) 2 3 5 7 11 13 17(1)质数的判断试除法(优化)枚举到根号x O(根号x) bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i原创 2023-04-15 15:59:39 · 444 阅读 · 7 评论 -
【STL】一文拿下所有C++stl
1. size() 返回元素个数2. empty() 返回是否为空3. clear() 清空7. []8.支持比较运算,按字典序1. first, 第一个元素2.second, 第二个元素3.支持比较运算,(字典序)1. size()/length() 返回字符串长度2. empty()3. clear()4. substr(起始下标,(子串长度)) 返回子串5. c_str() 返回字符串所在字符数组的起始地址先进先出1. size()原创 2023-04-08 22:39:34 · 352 阅读 · 10 评论 -
【数据结构】Trie
Trie,又称字典树,常用来存储和查询字符串。假定接下来提到的字符串均由小写字母构成,那么Trie将是一棵 26 叉树。根节点为空;字符从最左存入,如abcd一条线,若存入abe,那么就在b点向右延申一条线含点e;从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;注意是有终点的,如插入abc,查找ab就=0 ,因为abc终点是c,没查入过abTrie树其实是一种用空间换时间的算法,它占用的空间一般很大,但时间是非常高效。原创 2023-03-25 19:09:50 · 400 阅读 · 2 评论 -
【数据结构】栈和队列(数组实现)
【代码】【数据结构】栈和队列(数组实现)原创 2023-03-24 11:37:13 · 90 阅读 · 6 评论 -
【数据结构】单链表与双链表
1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。原创 2023-03-20 19:09:06 · 968 阅读 · 13 评论 -
【算法模板】离散化
有许多数分布在数轴上,数的取值范围很广,但是这些数的个数相对来说不是很多,要求对数轴上某个区间上的数进行求和等操作,可使用离散化模版,将数值映射到下标。基本的步骤可以分为:1、用一个辅助的数组把你要离散的所有数据存下来。2、排序,排序是为了后面的二分。3、去重,因为我们要保证相同的元素离散化后数字相同。4、索引,再用二分把离散化后的数字放回原数组。原创 2023-03-15 12:13:41 · 568 阅读 · 16 评论 -
【算法模板】区间合并
给定 n 个区间 [li,ri],要求合并所有有交集的区间。思路:可以将n个区间先按左端点排序,维护一个区间,并将维护区间与后面一个区间进行三种情况的比较(1.后一个区间包含于维护区间;2.后一个区间与维护区间部分相交;3.两个区间不相交),若后一个区间和当前维护的区间不相交时,需要将当前维护的区间存储到结果数组里,并将后一个区间作为新的维护区间,继续以上有关操作。原创 2023-03-15 11:15:28 · 325 阅读 · 6 评论 -
【算法模板】双指针算法
双指针算法的意义是对于两个循环的朴素算法O(n*n)的操作优化到O(n)朴素算法每次在第二层遍历的时候,是会从新开始(j会回溯到初始位置),然后再遍历下去。(假设i是终点,j是起点)双指针算法:由于具有某种单调性,每次在第二层遍历的时候,不需要回溯到初始位置(单调性),而是在满足要求的位置继续走下去或者更新掉。原创 2023-03-03 22:43:56 · 189 阅读 · 14 评论 -
【算法模板】位运算
位运算是二进制的运算,利用好有些题目将实现O(1)复杂度。&:按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0|:按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^:按位异或 若参加运算的两个二进制位值相同则为0,否则为1~:取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0:右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0原创 2023-03-02 11:06:51 · 106 阅读 · 6 评论 -
【算法模板】差分
差分数组:首先给定一个原数组a:然后我们构造一个数组b :使得也就是说,a数组是b数组的前缀和数组,反过来我们把b数组叫做a数组的差分数组。原创 2023-02-27 22:02:36 · 127 阅读 · 5 评论 -
【算法模板】前缀和
前缀和的算法目的是仅用O(1) 的时间复杂度进行求数组一段区间的和。1、S[i, j] = 第i行j列格子左上部分所有元素的和紫色面积是指(1, 1)左上角到(i, j - 1)右下角的矩形面积, 绿色面积是指(1, 1)左上角到(i - 1, j )右下角的矩形面积。每一个颜色的矩形面积都代表了它所包围元素的和。从图中我们很容易看出,整个外围蓝色矩形面积s[i][j] = 绿色面积s[i - 1][j] + 紫色面积s[i][j - 1] - 重复加的红色的面积s[i - 1][j - 1] + 小原创 2023-02-16 19:03:30 · 142 阅读 · 9 评论 -
【STL】vector详细介绍(最全)
pop_back()和push_back()一样,都是从vector末尾进行尾行操作。pop_back()每次都会移除一个元素。需要注意的是,如果vector为空,使用pop_back()将会产生异常结果,因此需要empty()来确定vector不为空。定义具有5个重复整型元素,且给出的每个元素初值为1。vector 可以看作是数组容器,一个动态数组,对于指针不太熟悉,可以利用vector实现。a是一个空vector,默认初始化。a包含初始值个数的元素且赋予初始值。定义具有5个整型元素,无初值。原创 2023-02-14 15:57:11 · 222 阅读 · 3 评论 -
a[i]-‘0‘的意义
打个比方,a[1]是‘1’,字符‘1’的ascii值是49。而你想要输出1而不是‘1’(49),那么a[1]-'0'就是49-48,这样就把a[1]存的字符转换成了整数型。这里的a[i]绝对是字符串类型或者字符类型,而字符在电脑里使用ascii码表示,48=‘0’结论:为了将字符数组的数转换成为整数类型。见博主文章,【算法模板】高精度问题。原创 2023-02-14 14:45:49 · 791 阅读 · 3 评论 -
【算法模板】高精度问题
说在前面,高精度问题仅针对c;javap与python自带这个函数。将大整数视作一个数组,先存储低位数。vectoradd(vector &A,vector &B) //这里的&是为了提高速度,减少一次数组拷贝{ vector C; int t=0;//t是进位 for (int i = 0; i < A.size()||i < B.size(); i ++ ) // { if(原创 2023-02-14 17:24:19 · 140 阅读 · 6 评论 -
【C语言与C++】指针详解、引用、数据结构实现两种语言区别
一:什么是指针int* p=&a;int 和*连在一起,p表示a的指针地址,*p表示a的值。注意:当*p=一个值时,a也会等于那个值。原创 2022-11-17 12:01:16 · 1425 阅读 · 3 评论 -
【C语言】数的循环输出(不再枚举)
l今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。例如,在1到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?求出[a,b]区间内有多少个数数位之和为5的倍数。原创 2022-10-12 20:30:10 · 586 阅读 · 3 评论 -
【C语言】如何应用%.0f
%.0f,表示不输出小数位,但要对第一位小数进行四舍五入%.1f,表示保留一位小数,对第二位小数进行四舍五入原创 2022-10-08 15:31:33 · 2064 阅读 · 5 评论 -
【C语言】秒数转换为时分秒
将秒数转换为时分秒的方法:若秒数为sec,那么能够得到时为sec/3600 分为sec%3600/60 秒为sec%3600%60利用java实现:import java.util.Scanner;public class Time{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入要换算的秒数");原创 2022-10-08 15:07:07 · 3618 阅读 · 5 评论