算法笔记

以下是为您整理出来关于【算法笔记】合集内容,如果觉得还不错,请帮忙转发推荐。

【算法笔记】技术教程文章

算法笔记/python/入门模拟进制转换【代码】

进制转换 D进制的A+B python的进制转换已有函数,bin(),oct(),hex()分别是十进制转换为二进制,八进制和十六进制的函数,本题为了不让输出带有0b,用格式化的方式。 “{:b}”.format(summ) import time time_start=time.time()a,b,c = map(int,input().split()) summ = a + bif c == 2:print("{:b}".format(summ)) elif c == 8:print("{:o}".format(summ)) elif c == 16:print("{:x}".format(summ))time_end=time.time() print('ti...

算法笔记--栈【代码】【图】

栈 栈的实现有效的括号最长有效括号二叉树的递归遍历队列和栈两个队列实现一个栈两个栈实现一个队列 删除字符串中所有相邻重复项自定义栈 栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈...

算法笔记-问题 B: 确定比赛名次【代码】

问题 B: 确定比赛名次 题目描述 有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 输入 输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来...

算法笔记【7】 最短路问题【代码】【图】

算法笔记【7】 最短路问题 最短路问题简介 这篇文章应该会很长,因为我们要探讨图论中一个基本而重要的问题:最短路问题。如下图,我们想知道,某点到某点最短的路径有多长?最短路问题分为两类:单源最短路和多源最短路。前者只需要求一个固定的起点到各个顶点的最短路径,后者则要求得出任意两个顶点之间的最短路径。我们先来看多源最短路问题。 Floyd算法(弗洛伊德算法) 我们用Floyd算法解决多源最短路问题: public static int...

【算法笔记】双端处理

有的递推算法既可以从左向右推也可以从右向左推,这种特性赋予了我们一个技巧,双端处理法 当一个东西对递推数组的影响仅限于左半部分或右边部分,我们可以构造一个反向递推的数组,把不受影响的部分合起来计算 EX最大字段和 经典的最大子段和问题应该都很熟悉了,那么如果把这个问题魔改一下,选取两段不相交的子段,使得他们的和最大,该怎么做? 先回忆一下最大字段和的DP做法,记f[i]为以i为右端点的最大字段和,那么则可以从左...

算法笔记01——回溯【代码】

1. 基本模板 class Solution {public List<List<元素类型>> 方法名(参数列表){//返回answer容器集合List<List<元素类型>> ans = new ArrayList<>();if (返回空集合条件) return ans;//返回answer容器集合子集List<元素类型> path = new ArrayList<>();//标记数组,对使用过的元素进行标记boolean[] used = new boolean[数组长度];//首先全部标记为未使用falseArrays.fill(used);backtrack(ans,path,遍历目标,遍历开始位置,used);re...

算法笔记-问题 C: 合并果子(堆)【代码】

问题 C: 合并果子(堆) 题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能...

算法笔记-BFS-迷宫问题【代码】【图】

迷宫问题 代码: #include <bits/stdc++.h>/* 5 5 ..... .*.*. .*S*. .***. ...T* 2 2 4 3 */using namespace std;struct node{int x;int y;int step; }S, T, Node;const int maxn = 100;int n, m;char matrix[maxn][maxn]; bool inq[maxn][maxn] = {false}; int dx[4] = {0, 0, 1, -1}, dy[4] = {1, -1, 0, 0};bool judge(int x, int y){if(x<0||x>=n||y<0||y>=m) return false;if(matrix[x][y]=='*'||inq[x][y]==true) retur...

算法笔记 Problem F: A+B和C (15)【代码】

算法笔记 Problem F: A+B和C (15) Description 给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。 Input 输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔 Output 对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。 Sample Input 4 1 2 3 2 3 4 2147483647 0 2147483646 ...

算法笔记

一、前言 1、所有数据结构实质上都是数组和链表: 数组是内存上的连续存储:可根据下标遍历快,但新增或删除时,需要开辟新的连续的空间,所以扩容时慢。 链表是内存上不连续的存储,比数据多个指针,多耗费空间:遍历需要根据指针逐个查找,所以性能不如数组,但扩容更快,因为存储空间不连续。 2、所有的数据结构,都是有套路的:查询无非是 “遍历+递归” 。 3、刷题先刷二叉树,然后再去刷回溯、动态规划、分治