自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 二分关键——边界判断(是否满足条件)

二分非常重要的关键就是判断边界是否满足所需的条件!以下是我常用的两套模板模板一模板二(有两种用法)H 指数 II 来源:力扣(LeetCode)模板一的边界符合题目要求,而接下来的模板二就是笔者想讲的边界判断是否满足条件这只是千万二分类型的题目之一,二分的核心——边界判断掌握才是关键。找到 K 个最接近的元素 来源:力扣(LeetCode)解法一:二分查找有人对于的 有疑问,为什么是 和 比较而不是和 比较,还有 会不会超边界首先, 是相对于 的第 个数, 必然是符合题目条件

2022-07-06 13:28:06 328

原创 浅谈哈希表

散列表 ( Hash table ,也叫 哈希表 ),是根据 键 (Key)而直接访问在记忆体储存位置的 数据结构 。也就是说,它通过计算一个关于键值的函数,将所需查询的数据 映射 到表中一个位置来访问记录,这加快了查找速度。模拟散列表维护一个集合,支持如下几种操作:I x,插入一个数 x;Q x,询问数 x 是否在集合中出现过;现在要进行 N 次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数 N,表示操作数量。接下来 N 行,每行包含一个操作指令,操作指令为 I x,Q .

2021-08-16 10:05:04 1179

原创 浅谈并查集

合并集合一共有 n 个数,编号是 1∼n,最开始每个数各自在一个集合中。现在要进行 m 个操作,操作共有两种:M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中;输入格式第一行输入整数 n 和 m。接下来 m 行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。输出格式对于每个询问指令 Q a b,都要输出一个结果,如果 a 和 b 在同一集合内,则输出

2021-08-04 11:18:23 170

原创 Tire 树运用

Trie字符串统计维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数 N,表示操作数。接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。输出格式对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x 在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗104输入样例:5I abc

2021-08-03 10:04:52 334

原创 浅谈双指针

常用双指针技巧可以分为两类,一类是「快慢指针」,一类是「左右指针」。笔者在本章只讲左右指针,主要解决数组(或者字符串)中的问题,比如二分查找,处理子序列。左右指针将给定的英文字符串进行反转。我们可以使用一头一尾的双指针。例如: I love cpp 得到的结果是:ppc evol I#include <iostream>#include <algorithm>#include <cstring>using namespace std;int main()

2021-08-02 12:30:54 193

原创 浅谈二分查找

如果我们有一个性质,能将一个区间划分成两部分,二分能将这个性质的边界求出来。

2021-07-30 16:34:03 236

原创 中位数技巧(推理+证明)

在有序序列中,中位数具有一些很优美的性质。定义中位数,又称中点数,中值。中位数是按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比他大,有一半的数据比他小,这里用来表示中位数。(注意:中位数和众数不同,众数指最多的数,众数有时不止一个,而中位数只能有一个。) 有一组数据:将它按从小到大的顺序排序为:X1,X2,X3…Xn则当N为奇数时 mid=X(n+1)/2;当N为偶数时mid=(X(n/2)+x(n/2+1))/2 。一个数集中最多有一半的数值小于中位数,也最多有一半

2021-07-26 15:42:53 4467

原创 贪心(总结+例题)

贪心是什么?定义:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。注意贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择算法思路贪心算法一般按如下步骤进行:建立数学模型来描述问题把求解的问题分成若干个子问题对每个子问题求解,得到子问题的局部最优解把子问题的解局部最优解合成原来解问题的一个解使用条件贪心选择性质一个问题的整体最优解可通过一系列局部的最优解的选择达

2021-07-22 16:25:30 1313 1

原创 曼哈顿距离(值得收藏)

曼哈顿距离定义出租车几何或曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。两点在南北方向上的距离加上在东西方向上的距离d(i,j)=|X1-X2|+|Y1-Y2|数学性质非负性:d(i,j)≥0 距离是一个非负的数值同一性:d(i,i)= 0 对象到自身的距离为0对称性:d(i,j)= d(j,i)距离是一个对称函数三角不等式:d(i,j)≤d(i,k)+d(

2021-07-18 17:03:20 2364

原创 第十届蓝桥杯省赛C/C++ B组

第十届蓝桥杯省赛C/C++ B组#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; string s; char k; if(n==1)cout<<'A'; while(n&&n!=1) { int x=n%26; n/=26; if(x==0) k='Z

2021-07-12 16:31:36 146

原创 背包问题(动态规划)

DP大法,玄妙无比。动态规划的原理动态规划(dyanmic programming)与分治方法相似,都是通过组合子问题的解来求解原问题。 分治方法:将问题划分为互不相交的子问题,递归求解子问题,再将姐组合起来,求出原问题的解。 与之相反,动态规划应用于子问题重叠情况,即不同子问题具有公共的子子问题(将子子问题存入表格,只求解一次) 刻画最优解的结构特征。 利用计算信息构造一个最优解。 “动态规划算法通常利用重叠子问题性质:对每一个子问题求解一次,将解存入表中,再次需要直接查表。 ” 适合动态规划方法求

2021-07-12 16:18:10 272

原创 奇偶剪枝--非常巧妙的技巧

奇偶剪枝是数据结构的搜索中,剪枝的一种特殊小技巧。奇偶剪枝的原理两点之间的曼哈顿距离为奇数, 则只能在奇数步内到达,偶数同理。即:假设起点为(x1,y1),终点为(x2,y2),给定 step 步恰好走到终点,则 abs(x2-x1)+abs(y2-y1) 与 step 同奇偶。证明以图代证:一开始没有障碍,“#”表示可以走,S 到 E 的最短步数为6。接下来有障碍了,要绕路。黑色的路是最短路,蓝色是最短路的平移,不影响步数,所以只有红色的路是绕的路即多走的路。通过观察,可以发现一.

2021-07-10 17:11:08 389

原创 Train Problem I(栈的溢出理解+栈运用)

今天刷题时做了一道栈的题,我想把AC的代码再优化一下,再次提交WA了,WA使我快乐 ,debug后发现是栈溢出了,于是找了栈溢出的原因。栈为什么会溢出?对每个程序来说,栈能使用的内存是有限的,一般是 1M~8M,这在编译时就已经决定了,程序运行期间不能再改变。如果程序使用的栈内存超出最大值,就会发生栈溢出(Stack Overflow)错误,程序就崩溃了。这个就像木桶里的水,木桶的容量有限,水满了自然会溢出来。那么,什么情况下才会发生栈溢出呢?最常见的就是递归。每次递归就相当于调用一个函数,函数每

2021-07-10 10:47:55 208

原创 最短路径问题(Dijkstra常用用法总结)

最短路径问题(Dijkstra常用用法总结)Dijkstra简介:迪杰斯特拉算法(Dijkstra)是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。注意该算法要求图中不存在负权边。模拟过程更利于理解在理解Dijkstra的基础上,我们可以用Dijkstra可解决以下几种最短路问题:单源最短路问题(一个起点到一个终点 ) (可延伸到)—

2021-07-08 09:46:53 2110 1

原创 字符串移位包含问题(STL)

字符串移位包含问题(C++)对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。输入格式共一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。输出格式如果一个字符串是另一字符串通过若干次循环

2021-01-17 10:42:50 506

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除