算法
Freeman Z
都柏林理工大学博士录取
巴黎高等电子学院工程师录取
李莫瑞克大学硕士在读(主持爱尔兰软件研究中心)
重庆2022优秀毕业生
展开
-
[字符串]ASCII码表
数字,字母位置数字0~9对应的ASCII码(十进制)袭为“48”~“57”大写字母A~Z对应的ASCII码(十进制)为“65”~“90”小写字母a~z对应的百ASCII码(十进制)为"97"~“122”表...转载 2020-05-03 21:40:27 · 22797 阅读 · 0 评论 -
OI竞赛的时间复杂度与数据要求
转载 2020-05-03 20:12:38 · 1028 阅读 · 0 评论 -
[排序]六种基本排序算法
冒泡排序插入排序归并排序快速排序选择排序堆排序冒泡排序思路有n个数,乱序。第一次,从左往右相邻之间的数字逐格比较大小,如果a[i]<a[i+1],则交换a[i]和a[i+1]的数值,此时队尾数值必定为数列最大值,因此在下一次比对中我们可以不考虑队尾数值。第二次,从左往右相邻之间的数字逐格比较大小,如果a[i]<a[i+1],则交换a[i]和a[i+1]的数值,此时...原创 2020-05-02 16:38:21 · 812 阅读 · 2 评论 -
[模板题][排序]堆排序
来源: 模板题算法标签:堆排序,堆题目描述输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共一行,包含m个整数,表示整数数列中前m小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3堆堆的基本操作1.插入一个数字2.求集合中...原创 2020-05-02 16:05:48 · 320 阅读 · 0 评论 -
[计蒜客][位运算]得到整数X
题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛)算法标签 二进制枚举子集 ,位运算题目描述思路这道题的想法是 用任意个数字凑成X,统计个数也就是说,我们的思路走向了N个数字,有W个子集,列举所有子集判断符合条件即可计算显然是爆搜的概念但是我们这次转换思路为利用二进制枚举子集我们有N个数字,那么用 0表示不选,1表示选择,我们一共共有1<<N个选择。我们增加到SIZE的...原创 2020-05-02 00:53:58 · 272 阅读 · 0 评论 -
[算法][排序]插入排序
题目简介过程图思路插入排序的思想:把某个位置上的的数值,插入到它最合适的位置说老实话,给我的感官非常像冒泡排序题目代码#include <iostream>using namespace std;int a[1000];void insertsort(int n){ for(int i=1;i<n;i++) for(int j...原创 2020-04-30 23:59:33 · 493 阅读 · 0 评论 -
[分治]查找最大和次大元素
题目简介查找最大和次大元素题目原思路【问题求解】对于无序序列a[low.high]中,采用分治法求最大元素max1和次大元素max2的过程如下:(1)a[low.high]中只有一个元素:则max1=a[low],max2=-INF(-∞)(要求它们是不同的元素)。(2)a[low.high]中只有两个元素:则max1=MAX{a[low],a[high]},max2=MIN{a[low...原创 2020-04-30 15:06:39 · 2499 阅读 · 0 评论 -
更相减损法|辗转相减法
时间复杂度o(n)题目代码int gcd(int a,int b){ if(a==b)return a; return a>b?gcd(a-b,b):gcd(b-a,a);}特殊情况辗转相除法可以用来求若干个形如(p/q)^ri的数的最大公约数,其中:——p/q不可以再表示为次幂的形式——p、q、ri均为正整数算法推导求指数的最大公约数,即:f(p^x...原创 2020-04-27 00:31:31 · 1865 阅读 · 1 评论 -
[模板题]汉诺塔(hanoi)问题
题目来源 网络算法标签 递归,模拟故事背景汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世...原创 2020-04-14 01:08:24 · 749 阅读 · 0 评论 -
[算法]归并排序
文章目录图示时间复杂度思路核心代码方便拿的完整代码测试输入输入图示时间复杂度n(nlog2^n)思路持续递归将数组拆分为大小为1的块。1.每两个大小为1的块相互比较比较数值大小,数值小的块内元素放入到临时数组TMP,循环直到某个块内元素都被循环完毕,此时另一个块内元素全部放入临时数组TMP,到此时两个块内元素都被放入临时数组TMP,TMP内为顺序递增,复制到a[]数组的l,r制定区间...原创 2020-04-13 22:51:56 · 186 阅读 · 0 评论 -
[算法]冒泡排序
思路有n个数,乱序。第一次,从左往右相邻之间的数字逐格比较大小,如果a[i]<a[i+1],则交换a[i]和a[i+1]的数值,此时队尾数值必定为数列最大值,因此在下一次比对中我们可以不考虑队尾数值。第二次,从左往右相邻之间的数字逐格比较大小,如果a[i]<a[i+1],则交换a[i]和a[i+1]的数值,此时队尾-1数值必定为数列第二最大值,因此在下一次比对中我们可以不考虑该数...原创 2020-04-13 10:44:42 · 235 阅读 · 0 评论 -
[算法]选择排序
思路有n个数,乱序。第一次,遍历找到最小数字,与第一个交换。第二次,从第二个数字出发,遍历找到最小数字,与第二个交换。第三次,从第三个数字出发,遍历找到最小数字,与第三个交换。…直到用来记录出发位置的数字(begin)累加到等于数组长度(n-1),完成。时间复杂度o(n^2)核心代码void selectsort(int a[],int n,int begin)//a[]数组,...原创 2020-04-13 00:24:15 · 150 阅读 · 0 评论 -
最大子段和
转载来源:百度百科:最大子段和算法标签 递推,DP,最大子段和问题描述问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n例如...转载 2020-04-06 15:22:28 · 219 阅读 · 0 评论 -
[模板题]01背包问题
来源: 背包九讲 , 模板题算法标签:背包问题,DP题目描述有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,...原创 2020-03-12 20:19:45 · 218 阅读 · 0 评论 -
[第七届蓝桥杯省赛C++A/B组]四平方和
来源: 第七届蓝桥杯省赛C++A/B组算法标签:二分,哈希题目描述四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。比如:5=02+02+12+227=12+12+12+22对于一个给定的正整数,可能存在多种平方和的表示法。要求你对 4 个数排序:0≤a≤b≤c≤d并对所有的可能表示...原创 2020-03-11 00:41:31 · 365 阅读 · 0 评论 -
[模板题]数的范围
来源: 模板题,AcWing算法标签 二分题目描述给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个...原创 2020-03-10 16:13:29 · 192 阅读 · 0 评论 -
[算法竞赛进阶指南][dfs]递归实现组合型枚举
来源: 《算法竞赛进阶指南》算法标签 递归题目描述从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。输入格式两个整数 n,m ,在同一行用空格隔开。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)...原创 2020-03-10 00:00:07 · 272 阅读 · 0 评论 -
[算法竞赛进阶指南][dfs]递归实现排列型枚举
来源: 《算法竞赛进阶指南》算法标签: 递归题目描述把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据范围1≤n≤9输入样例:3输出样例:1 2 31 3 22 1 ...原创 2020-03-09 01:12:53 · 313 阅读 · 0 评论 -
[算法竞赛进阶指南][dfs]递归实现指数型枚举
来源: 《算法竞赛进阶指南》算法标签: 递归题目描述从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:...原创 2020-03-08 23:45:59 · 268 阅读 · 0 评论 -
[线筛|欧拉筛]线性筛选素数
来源:模板题目描述:用线行筛筛选素数,将指定范围的素数找出,达到O(n)的效果。思路时间复杂度0(n)思路任意值必然可以被分解为:a=b1^c1*b2*c2*...例如9=3^3,15=3*5,55=5*11即所有的合数都可以被拆解为素数倍数的乘积。当我们从2开始找到素数与含有素数的合数,将合数标记为非素数,每个合数都将被最小因素数标记,且只标记一次。所以该公式虽然为双重循环,...原创 2020-03-08 02:24:37 · 259 阅读 · 0 评论 -
简单掌握欧几里得算法|辗转相除法|最大公因数算法|gcd
不能用欧几里得这个名字来想,应该直接想辗转相除法即在两个数中求得最大公约数,当一方为0时,返回另一方。变换位子使用余数递归自身进行计算。int gcd(int a,int b){ return b?gcd(b,a%b):a;}...原创 2020-03-07 00:27:14 · 321 阅读 · 0 评论 -
[蓝桥杯][信息学奥赛一本通]红与黑
算法标签 DFS,Flood Fill来源: 《信息学奥赛一本通》题目描述有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。输入格式输入包括多个数据集合。每个数据集合的第一行是两个整数 W 和 H,分别表示 x 方向和 y 方向瓷砖的数量。在接下来...原创 2020-03-04 21:01:03 · 515 阅读 · 0 评论 -
简单全排列的逻辑(递归实现)
全排列:将一个包含了N个元素的数组进行所有可能组合的排列。例如: 问题: 我们将集合a[]={1,2,3}进行排列,如何进行解决?这里,我们可以运用分治的思路将问题转化为以下三个新的问题:1开头的全排列2开头的全排列3开头的全排列我们利用DFS与回溯的概念,当我们分到最后一个字符串数字的时候即可判断是否满足条件!——以此得到下图的概念即得到以下6个排列!1,2...原创 2019-03-26 11:50:21 · 474 阅读 · 0 评论