算法
每天进步一点点
pluszzh
这个作者很懒,什么都没留下…
展开
-
两种选择类排序算法(简单选择排序,堆排序)
选择类排序:1.简单选择排序//不稳定 void SelectSort(int a[],int n){ int min,i,j,t; //n-1趟循环 for(i=0;i<n-1;i++){ //找出当前区间最小的关键字的位置 min = i; for(j=i+1;j<n;j++){ if(a[j]<a[min]) min=j; } if(i!=min){ t=a[min]; a[min]=a[i]; a[i]=t; } }原创 2020-07-16 20:01:25 · 338 阅读 · 0 评论 -
两种交换类排序(冒泡排序,快速排序)
交换类排序算法代码实现1.冒泡排序线性表冒泡排序flag优化void BubbleSort(int a[] ,int n){ //n-1次起泡 bool flag; for(int i=0;i<n-1;i++){ flag=false; for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ //保证稳定性,等于不交换 flag = true; int t = a[j]; a[j] = a[j+1];原创 2020-07-16 19:57:17 · 297 阅读 · 0 评论 -
插入排序算法四种实现
插入排序算法实现直接插入排序不带哨兵版本void InsertSort(int a[],int n){ //对第二个元素到最后一个元素进行插入操作 int i,j,t; for(i=1;i<n;i++){ int t=a[i]; //通过对比前面的元素找到插入位置 for(j=i-1;j>=0&&a[j]>t;j--){ a[j+1] = a[j]; } //到j+1的位置进行插入 a[j+1]=t; }}直接原创 2020-07-15 17:44:37 · 522 阅读 · 0 评论 -
[算法]Dijkstra算法模板(java)
注: 稠密图用邻接矩阵存储 稀疏图用邻接表时间复杂度o(n2)import java.util.Scanner;public class Main { static int n,m; static int N = 510; //邻接矩阵来存储图 static int [][] g = new int[N][N]; //已经求出最短路点的集合 static boolean...原创 2020-04-12 21:58:02 · 323 阅读 · 0 评论 -
有向图的拓扑排序算法(java实现)
有向图的拓扑排序算法(java实现)import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class TopologicalOrder{ static class Node{ int pos; int val; Node next; } static ...原创 2020-04-11 21:47:02 · 870 阅读 · 0 评论 -
图的邻接表存储及常见问题模板(java)
图的邻接表存储及常见问题模板(java)import java.util.Arrays;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Main { static int N = 100010; static class Node{ ...原创 2020-04-08 11:17:25 · 297 阅读 · 0 评论 -
[算法]快速幂算法
快速幂算法 目的:求 a 的 k 次方 mod p 的结果。1<=a,k,p<=10^9用朴素做法需要o(n)时间复杂度,用快速幂算法降低到o(logn)的时间复杂度算法思想:反复平方的思想算法步骤:若要算 3^5mod 5如果我们这样求模的话,最多需要logk次预处理,就可以成功算出来结果java代码实现import java.util.Scan...原创 2020-04-05 16:29:16 · 351 阅读 · 0 评论 -
[算法]最大子阵(前缀和)
import java.util.Scanner;public class Main{ static int N = 1005; static int [][] a = new int[N][N]; static int [][] s = new int[N][N]; static long res = Long.MIN_VALUE; public static void ma...原创 2020-03-21 17:44:09 · 143 阅读 · 0 评论 -
数据结构 堆排序模板
堆支持的操作:1.插入一个数2.求集合当中的最小值3.删除最小值4.删除任意一个元素5.修改任意一个操作import java.util.Scanner;public class HeapSort{ //堆排序 static int N = 10010; static int [] h = new int[N]; static int siz...原创 2020-02-15 18:52:27 · 128 阅读 · 0 评论 -
基础算法——一维数组离散化(acwing802)
假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来 n 行,每行包含两个整数x和c。再接下里 m 行,每行包含两个整数l和r。输出格式共m行,每行输出一个询问中所求的区间内数字和...原创 2020-01-26 18:34:07 · 610 阅读 · 0 评论 -
数据结构-线段树 单点修改,区间查询
线段树构造:public class xianduanshu { static int [] arr = {0,1,2,3,4,5,6,7}; static class Tree{ int l; int r; int sum; Tree left; Tree right; public T...原创 2020-01-25 15:02:25 · 135 阅读 · 0 评论 -
leetcode102.二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 来源:力扣(LeetCode) 链接...原创 2019-07-30 18:09:57 · 72 阅读 · 0 评论 -
leetcode105. 从前序与中序遍历序列构造二叉树(JAVA递归)
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn...原创 2019-07-30 17:52:30 · 135 阅读 · 0 评论 -
leetcode94.二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处...原创 2019-07-30 16:32:12 · 92 阅读 · 0 评论 -
leetcode101.对称二叉树(JAVA 递归与非递归)
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和迭代两种方法解决这个问题,会很...原创 2019-07-30 16:10:36 · 246 阅读 · 0 评论 -
数据结构之(六)之二叉排序树
二叉排序树定义:①它的左子树非空,那么左子树的值要小于根节点的值。②它的右子树非空,那么右子树的值要小于根节点的值。③它的左右子树也为二叉排序数。二叉排序数的初始化,创建较简单,直接贴上源代码。这篇博客主要探讨的是二叉排序树的删除操作。#include&lt;stdio.h&gt;#include&lt;iostream&gt;#include&lt;stdlib.h&gt;usi原创 2019-01-05 12:34:52 · 287 阅读 · 0 评论 -
数据结构(五)之图的深度优先遍历和广度优先遍历
/*深度优先搜索策略*//*dfs深度搜索策略:①从某个顶点v0出发,首先访问v0。 ② 找出刚访问节点的第一个未被访问的邻接点,然后访问该节点。以该节点为新顶点,重复此步骤,直到刚访问 过的顶点没有未被访问的邻接点位置。 ③返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该邻接点, ...原创 2019-01-04 14:16:53 · 1258 阅读 · 0 评论 -
约瑟夫环循环链表实现和队列实现
约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。此程序运用了循环链表和递归的方法来...原创 2019-01-04 12:27:38 · 424 阅读 · 1 评论 -
数据结构(四)之非递归遍历二叉树
void Inoder(Bitree root)//二叉树的中序遍历非递归 { IniStack(&S);//初始化一个栈 p=root; while(!isEmpty(S)||p!=NULL) { if(p!=NULL)//如果当前结点不为空进栈 { push(S,p); p=p->left;//若该节点的左节点不为空,继续进栈 } els...原创 2019-01-02 14:03:51 · 220 阅读 · 0 评论 -
数据结构之(三)之数组篇
①设计一个算法,将一维数组A(下标从1开始)中的元素循环右移k位,要求 只用一个元素大小的附加存储空间。给出算法的时间复杂度。#include&lt;stdio.h&gt; int Cir(int a[],int n,int k)//数组a,数组的 个数,循环的位数 { for(int i=0;i&lt;k;i++) { int t; t=a[n-1]; ...原创 2019-01-02 11:12:51 · 363 阅读 · 0 评论 -
数据结构(二)之稀疏矩阵篇
稀疏矩阵是指矩阵中大多数元素为零的矩阵。从直观上讲,当非零元素个数低于总元素的30%,这样的矩阵被称为稀疏矩阵。稀疏矩阵的表示方法ex1A={0,12,9,0,0,0,00,0,0,0,0,0,0-3,0,0,0,0,14,00,0,24,0,0,0,00,18,0,0,0,0,015,0,0,-7,0,0,0}一 三元组表示法 ...原创 2018-12-28 14:23:13 · 918 阅读 · 0 评论 -
数据结构(一)之链表篇
链表篇#include<stdio.h>//P77例三 int ReversDouble(LinkList L){ int n=1; LinkList pre,p,q; pre=L; p1=L->next; p=L->next; while(p) { q=p->next; if(n%2==1) { ...原创 2018-12-27 15:27:11 · 148 阅读 · 0 评论 -
leetcode98——验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: ...原创 2019-07-30 15:13:50 · 121 阅读 · 0 评论 -
LeetCode 链表好题
Leetcode9. 删除链表的倒数第N个节点Leetcode83. 删除排序链表中的重复元素Leetcode61. 旋转链表Leetcode24. 两两交换链表中的节点Leetcode206. 反转链表Leetcode92. 反转链表 IILeetcode160. 相交链表Leetcode142. 环形链表 IILeetcode9. 删除链表的倒数第N个节点class Solu...原创 2019-07-23 22:06:06 · 158 阅读 · 0 评论 -
中缀表达式,后缀表达式,中缀表达式转后缀表达式
一. 后缀表达式求值后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3 + *,则其求值过程如下:1)遍历表达式,遇到的数字首先放入栈中,此时栈如下所示:2)接着读到“+”,则弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中。3)读到8,将其直接放入栈中。4)读到“”,弹出8和5,执...原创 2019-07-11 18:22:26 · 289 阅读 · 0 评论 -
数论基础——(最大公约数,最小公倍数)的求法
**最大公约数:最大公约数用辗转相除法可以求出来最小公倍数:最小公倍数 = 两个数的乘积 / 最大公约数**辗转相除法:两个数的约数 等于 其中一个 较小数的约数 和 连两个数的模的约数。一直进行递归调用,如果求出来两个数的模为0 那么就找到最大公约数了,最大公约数就是为两个数求模数中被模数gcd(x , y) -> gcd(y,x%y) //如果x比y大进行交换 ...原创 2019-06-28 16:54:19 · 793 阅读 · 0 评论 -
蓝桥杯2013Java组省赛(黄金队列——模拟手算除法)
//比较简单的一种是用连分数:// 1//黄金数 = ---------------------// 1// 1 + -----------------// 1// 1 + -------------// ...原创 2019-06-28 16:38:44 · 277 阅读 · 0 评论 -
蓝桥杯2013Java组省赛(振兴中华dfs)
//标题: 振兴中华// 小明参加了学校的趣味运动会,其中的一个项目是:跳格子。// 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg)//从我做起振//我做起振兴//做起振兴中//起振兴中华// 比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。// 要...原创 2019-06-27 20:19:59 · 182 阅读 · 0 评论 -
蓝桥杯2013Java组省赛(世界末日)
//曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。//还有人称今后的某个世纪末的12月31日,如果是星期一则会…//有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!//于是,“谣言制造商”又修改为星期日…//1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?//请回答该年...原创 2019-06-27 20:17:58 · 209 阅读 · 0 评论 -
蓝桥杯2012Java组决赛(九宫重排bfs)
如图1的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成图2所示的局面。我们把图1的局面记为:12345678.把图2的局面记为:123.46758显然是按从上到下,从左到右的顺序记录数字,空格记为句点。本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。例如...原创 2019-06-17 14:12:33 · 203 阅读 · 0 评论 -
蓝桥杯2012java组决赛(快速排序)
static void f(int[] x, int left, int right) { if(left >= right) return; int key = x[(left+right)/2]; int li = left; int ri = right; while(li<=ri){ while(x[ri]>key) ri--; w...原创 2019-06-17 14:09:25 · 114 阅读 · 0 评论 -
蓝桥杯2012java组决赛(连续奇数和)
小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和。比如:2^3 = 8 = 3 + 53^3 = 27 = 7 + 9 + 114^3 = 64 = 1 + 3 + … + 15虽然他没有想出怎么证明,但他想通过计算机进行验证。请你帮助小明写出 111 的立方之连续奇数和表示法的起始数字。如果有多个表示方案,选择起始数字小的方案。请严格按照要求,通过浏览器提交答案。注...原创 2019-06-17 14:07:36 · 130 阅读 · 0 评论 -
蓝桥杯2012java组决赛(猜灯谜)
A 村的元宵节灯会上有一迷题:请猜谜 * 请猜谜 = 请边赏灯边猜小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。请严格按照格式,通过浏览器提交答案。注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。暴力搜索即可public class lanqiao2012_final_1 {...原创 2019-06-17 14:06:31 · 128 阅读 · 0 评论 -
博弈问题小结
1.如果此时A输了,那么A + 下一步的所有可能的状态转移一定赢2,如果此时A赢了,那么A + 下一步的所有可能的状态转移不确定输赢!首先要明确一点 一个状态不是赢就是输从第一个输状态出发——>找到经过一次所有可能状态变化后必赢的状态比如第一个输状态为1,一次可移动的步长为1,2,7,8那么在一次状态变化内赢的状态为 2,3,8,94,5,6,7视作为输状态如果后面不能推出4...原创 2019-06-15 00:07:17 · 177 阅读 · 0 评论 -
蓝桥杯2012省赛——密码发生器
在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了…这个程序的任务就是把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。变换的过程如下:第一步. 把字符串6个一组折叠...原创 2019-06-10 23:14:34 · 141 阅读 · 0 评论 -
蓝桥杯2012省赛——古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把 ABCDE 所代表的数字写出来。答案写在“解答.txt”中,不要写在这里!public void methodA(){ ...原创 2019-06-10 23:12:58 · 126 阅读 · 0 评论 -
蓝桥杯2012省赛——微生物增殖
假设有两种微生物 X 和 YX出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。如果X=10,Y=90 呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数目。题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈...原创 2019-06-10 23:11:45 · 162 阅读 · 0 评论 -
蓝桥杯2012省赛——趣味算式
匪警请拨110,即使手机欠费也可拨通!为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!某批警察叔叔正在进行智力训练:1 2 3 4 5 6 7 8 9 = 110;请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9...原创 2019-06-10 23:10:16 · 227 阅读 · 0 评论 -
蓝桥杯2012省赛——奇怪的比赛
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10...原创 2019-06-10 23:08:44 · 139 阅读 · 0 评论 -
蓝桥杯2012省赛—比酒量
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。 等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船....原创 2019-06-10 23:07:06 · 79 阅读 · 0 评论