随笔分类 - 数据结构和算法
摘要:一、KMP--字符串匹配算法 1.1 什么是KMP 三个提出者名字首字母组成 解决的问题:字符串匹配问题 给定一个文本串s,以及一个模板串p,求模板串是否出现在文本串中,是的话出现在哪个位置 1.2 字符串匹配的暴力做法 两层遍历:O(mn) 缺点 每当匹配不成功,pat的j都是回溯到最开头(向右滑
阅读全文
摘要:一、列出全排列 1. 从1到n的全排列 2. 字符的全排列 2.1 题目描述 给定一个字符串,列出所有的字符的全排列 链接 2.2 题目思路 可以对字符串做映射,但是其实每个字符都在字符串对应了一个位置(字符串的下标),因此,求下标的全排列,即可以求出字符的全排列。 2.3 代码实现 #includ
阅读全文
摘要:一、引言 最近在努力上岸中,发现很多需要C语言机试,所以后面我要有两个版本的实现,不能有了python忘了C,冲! 二、求约数 2.1 试除法求约数 原理:假设要求n的约数,则枚举,看是否能整除n,可以的话说明该数是n的约数 优化:只枚举 一个数d如果是n的约
阅读全文
摘要:一、概述 1.并查集是一种用于解决所谓的动态连通性问题的算法。 2.使用算法解决问题的第一步是建立问题模型,找出解决该问题大体上所需要的基本操作 二、动态连通性问题 任务:对于给定的对象集合高效地实现“并”与“查”这两个命令。 PS:本次学的算法不会给出一条具体的路径,只能回答这样的问题:是否存在一
阅读全文
摘要:一、语法小点 实现c++的?:语句 s[num] = stack[-1] if stack else -1 赋值运算符 := 用处:直接声明并初始化 if语句 my_list = [1,2,3] count = len(my_list) if count > 3: print(f"Error, {c
阅读全文
摘要:1. 装箱问题 1.1 问题描述 有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。 要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。 1.2 解题思路 这道题的问题是要使得剩余空间最小,即物品使用的空间最大,01背包问的是价值最大,可以看出,使用空间和体积有关
阅读全文
摘要:前言 01背包——万恶之源 我一定要搞好这个背包问题! 一、 01背包 1. 问题描述 01背包问题:给定个物品和容量为的背包,每个物品有两个属性:价值和体积,每个物品只能取1次,问在背包中放入哪些物品可以使得总价值最大? 输入例子: 4 5 # 物品数量和背包容量
阅读全文
摘要:一、拦截导弹 —— LIS + 贪心(Dilworth定理) 1. 题目描述 拦截导弹 有一个导弹拦截系统,一开始可以调节高度,确定高度之后就只能往下移动(以后每一发都不能高于前一发)。给定敌方飞来的一系列导弹高度,问: 只有一台拦截系统时,最多能拦截多少导弹? 最少要多少拦截系统能拦下所有导弹?
阅读全文
摘要:Acwing1017. 怪盗基德的滑翔翼 1. 题目描述 怪盗基德的滑翔翼 给定一个长度为N的序列,怪盗基德可以从任意位置作为起点,并选择一个方向(向左或者向右),求能单调下降的最长距离为多少 1. 题目思路 前提是要先知道LIS(最长上升子序列)模型。 💡 理解: 本题是LIS+理解题意。 当怪
阅读全文
摘要:1. 题目描述 题目链接 N*N方格中某些地方有正整数,其他都为0。 只能向右或者向下走,一个数只能取一次 问从左上角到右下角走两次,如何走能使得取得的数字最大 2. 题目思路 是在摘花生这道题进行了扩展,变成了两条路径之和最大为多少 如何从走一次扩展到走两次? f[i, j] 表示从(1,1)走到
阅读全文
摘要:前言 最近做了几道题,发现有一点相似之处,解法却又不相似,我整理成一起看看有什么化学反应。 一、行列都是随机递增、查找某元素是否存在 1. 题目描述 剑指offer04 二维数组中的查找 给定一个二维数组,行和列都是递增函数,然后给定一个整数,问该数组里面是否有该整数 [[1, 4, 7, 11,
阅读全文
摘要:1. 题目描述 题目 给定一个长度为n的数组nums,所有元素都在0~n-1的范围内,找出数组中重复的值(任意一个即可) 输入:[2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 2. 题目思路和代码实现 注意点:要问时间复杂度和空间复杂度 时间O(n) 空间O(n) --> 利用哈希表
阅读全文
摘要:1. 题目描述 给定一个矩阵,矩阵中元素的值表示花生的个数 从左上角走到右下角,只能向右走或者向下走,问能采到的花生最大值是多少 典型的数字三角形模型,求最大路径和 2. 题目思路 从集合角度考虑DP问题 状态表示 集合:从左上角点到的所有路线 属性:最大
阅读全文
摘要:先来一波温习: sort函数排序 sort(first_pointer,first_pointer+n,cmp),该函数可以给数组,或者链表list、向量排序。 参数1:第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。 参数2:第二个参数相对较好理解,即首地址加上数组的长度
阅读全文
摘要:#include<stdio.h> #include<iostream> using namespace std; const int maxn = 100010; struct NODE{ char data; int next; bool flag; }list[maxn]; int find(
阅读全文