基础算法
文章平均质量分 51
devtommy
这个作者很懒,什么都没留下…
展开
-
最大的和
贝壳找房2021笔试题解析:将总的和看做是两部分:已经为1的和与处理后为1的和,第一部分是固定值,所以本题就转化成了求第二部分的最大值滑动窗口的思想#include <algorithm>#include <cstring>#include <iostream>using namespace std;typedef long long LL;const int N = 100010;int n, m;int a[N], b[N];int原创 2021-05-12 19:22:31 · 59 阅读 · 3 评论 -
二分查找板子
一:用于查找整个序列中第一个符合条件的下标:while (l < r){ int mid = l + r >> 1; if (check(mid) < x) l = mid + 1; else r = mid; }二:用于查找最后一个符合条件的下标:while (l < r){ int mid = l + r + 1 >> 1; if (check(mid) <= x) l = mid; else r = mid - 1; }..原创 2021-05-12 10:24:38 · 138 阅读 · 1 评论 -
01背包
未优化代码:#include<iostream>#include<algorithm>using namespace std;const int N = 10010;int f[N][N], v[N], w[N];int n, m;int main(){ cin >> n >> m; for(int i = 1; i <= n; i ++ ) cin >> v[i] >> w[i]; for(原创 2021-05-09 20:43:54 · 55 阅读 · 1 评论 -
模拟堆
堆操作:难点:删除第k个插入的数,但是在堆里面是以下标的形式储存的,所以要搞清楚第k个插入的数对应在堆中的下标是什么,所以在这里开一个数组来维护ph[k] = i用来储存第k个插入的点在堆中对应的下标是啥hp[i] = k 用来储存堆中下标为i的点对应的是第几个插入得点难点一在于映射关系的建立,其次映射关系的维护也是一大操作难点,所以在交换堆的元素时,应该维护所建立的映射关系,所以在这里要创建独特的堆的交换函数,不能直接交换,打乱映射关系://交换两个堆元素的下标void heap_swap(i原创 2021-05-08 20:10:14 · 122 阅读 · 1 评论 -
ZZA的项目学习开发文档学习笔记5/7
Python while 循环:注解一:prompt = "\nTell me something, and I will repeat it back to you:"prompt += "\nEnter 'quit' to end the program. "message = ""while message != 'quit': message = input(prompt) print(message)创建变量用来记录用户输入的值,将初始值设置为空字符串"",让Python在一开始原创 2021-05-07 20:59:35 · 190 阅读 · 1 评论 -
ZZA的项目学习开发文档和算法学习笔记5/6
Python在字典中储存列表用for循环访问键的时候,对应的值为列表list,若要访问列表的值,再嵌套一个for循环即可:favorite_languages = { 'jen' : ['Python', 'ruby'], 'sarah' : ['c'], 'edward' : ['ruby', 'go'], 'phil' : ['python', 'haskell'], }for name, languages in favorite_languages.i原创 2021-05-06 21:21:10 · 145 阅读 · 3 评论 -
ZZA的项目学习开发文档和算法学习笔记5/2
先复习一下数据结构考察TrieTrieTrie算法的题目通常会限制:字符串只有小写英文字母或者大写英文字母,且字母通常为262626或525252个trie树可以保证在O(n)O(n)O(n)的时间复杂度下储存和查找字符串字典树的数组实现方式:开两个数组:cnt[N], son[N][26],分别用来存储:以某个节点结尾的字符串的数量 和 某一个节点的所有子节点插入操作:#include<bits/stdc++.h>using namespace std;const int原创 2021-05-02 19:47:57 · 188 阅读 · 0 评论 -
N皇后问题(DFS的两种实现)
n皇后问题的两种解法(剪枝)n皇后问题的两种解法(剪枝)n皇后问题的两种解法(剪枝)解法一:全排列的思想前提:已经知道每一行只能放一个皇后,所以要固定行来枚举每一行中皇后要放置的位置,注意,在这里相当于我们已经提前预处理出来隐含条件了,不属于原始解法。和全排列的思想一模一样,以行为单位进入递归,在函数中对每一行中的每一个元素进行搜索遍历,直到找到合适的位置位置,然后进入下一行进行搜索,在进行回溯的过程中要注意恢复现场(可能再恢复现场后由于循环没有执行完,会恢复完后继续向后搜索,往后递归,这里就体现出了原创 2021-04-21 23:32:33 · 276 阅读 · 3 评论 -
马拦过河卒的暴搜过程
图片来自于洛谷暴力搜索过程可以类比为以下九宫格的搜索过程:第一次搜索过程:由于在前面的递归函数为向右搜索的,所以先一直调用向右搜索的过程,直到搜索超出右边的范围,return;表示递归过程结束,将函数控制权放回到上一次递归函数处,继续按顺序执行函数,所以将会执行到下一个递归函数,既向下搜索的过程,然后在进入函数的过程中,由于向右搜索的函数在向下搜索的函数上面,所以还是先判断是否能向右搜索,向右搜索会越界,函数控制权返回到上一次控制向右搜索的位置,继续顺序执行函数,然后以此类推,最终到达目的地;原创 2021-04-20 20:17:05 · 116 阅读 · 5 评论 -
青蛙过河水题水博客
找规律:将此问题分为两大块:当河中石柱(x)为0时,通过的青蛙数目仅与当前荷叶数目(y)有关:num_frog = y + 1当存在河中石柱时,可以把青蛙跳过的过程等价为一下过程:分为红色的和绿色的部分,将其中一个河中石柱看做是右石柱,然后借用其他的荷叶和石柱将青蛙尽可能多的转移到该石柱上,然后再把除去本石柱的其他石柱和荷叶跟真右石柱看做一个整体,进行转移,两个过程的石柱和荷叶类型一模一样,所以两次分别转移的青蛙数目是一样的,最后再利用石柱和荷叶将河中石柱的青蛙转移到右石柱上,注:由于这里的转移过程原创 2021-04-16 10:08:21 · 169 阅读 · 0 评论 -
DFS全排列问题及其递归的底层实现
递归:函数自己调用自己。但是在做递归时从来没有深度思考过他的内部结构到底是什么,借用全排列问题的DFS解法深度解析一下递归的内部本质问题。在每一次递归过程中,会进入一个“新的”函数内部,新是指数据是新的。当递归到下一层后,上一层截止的到下此次递归开始之前的变量及数据都会被计算机保存到一个栈内,然后下一次递归结束后进入下下次递归后同理也会将数据保存下来,每一层递归都有自己的独立变量(地址是一样的),在逐层递归的过程中都会继续将数据保存在这个栈内部,直到到达递归的终止条件,“递”过程结束,开始“归”,既回溯过原创 2021-04-15 22:53:28 · 270 阅读 · 0 评论 -
Hash 模拟散列表
题干来源Acwing哈希表利用映射关系将数据量缩小,可以理解为有序化(这里并不是真的排序而是将有相同映射值得放到相同的空间下储存,从而能实现简化查找过程和删除过程)其中插入过程中处理冲突的方式分为两种,一种是拉链法,一种是开放寻址法,本题利用拉链法拉链法在处理相同映射情况时是利用了链表的方式进行插入进行的,总体来看像拉链一样,所以被称为拉链法。其中的映射哈希值k = 应注意c++中对负数取模为负数,所以应保证k为正数,所以在这里是如下处理的:代码:#include<bits/stdc++原创 2021-04-11 23:18:34 · 72 阅读 · 0 评论 -
A. Restoring Numbers
标题A. Restoring Numbers time limit per test 2.0 s memory limit per test 256 MBPavel had two positive integers a and b. He found their sum s and greatest common divisor g, and forgot a and b after that. Help him to restore the original numbers.原创 2021-03-28 16:35:39 · 144 阅读 · 1 评论 -
试除法求素数
试除法求素数#include<bits/stdc++.h>using namespace std;int main(){ int n, t, flag; cin >> t; while(t -- ) { cin >> n; if(n == 1) flag = 0; else if(n == 2) flag = 1; else {原创 2021-03-27 16:51:12 · 246 阅读 · 0 评论 -
天梯赛补题
情人节以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。简单题,好思想输入格式:输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。输出格式:根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are invit原创 2021-03-27 16:03:17 · 1170 阅读 · 1 评论 -
整除光棍
题干:这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比原创 2021-03-25 20:36:29 · 397 阅读 · 1 评论 -
二叉树基础
二叉树的遍历:一. 递归遍历1.先序遍历简记为:根左右\color{blue}{根左右}根左右即先遍历根节点,然后遍历左子树,最后遍历右子树如下图所示先序遍历的顺序则为:1 2 4 5 3 6 7实现代码:struct node { int data; struct node *lc, *rc;};void pre(struct node * root ){ if(root == NULL )return ; printf("%d", root->data); pre原创 2021-03-23 22:20:15 · 70 阅读 · 0 评论