笔记
IOUIUY
这个作者很懒,什么都没留下…
展开
-
差分数组。
1,什么是差分数组:差分数组就是一个用来记录原数组数据差值的数组,比如差分数组的arr[i] = arr[i] - arr[i - 1] (i > 0) , i = 0 时差分数组的arr[i] 就是原数组的0下标的元素。2,差分数组有什么用:当我们想让一个整形数组的某段区间加上或减去同一个数时,我们的一般操作就是遍历我们想改变的区间,依次计算,当数组足够大并且需要计算的区间足够大而且需要多次进行这种操作时,这样的操作所耗时间比较多。这时,我们可以利用差分数组,只需修改需要计算的区间的边原创 2021-08-31 23:16:11 · 391 阅读 · 0 评论 -
c++ bitset
使用bitset需要添加头文件bitset ,bitset是一种特殊的容器 ,bitset数组中 ,每个成员只装1bit位的数据 , 即只能是0 或 1。bitset 的基本用法 :初始化bitset容器bitset<‘size’> 容器名;未初始化容器数据,会默认每位都是0也可以给一个具体的初始化:存入int数据bitset<‘size’> 容器名(‘num’);会将num以二进制形式储存在bitset中,如果初始化的容器位数不够 ,会截取num二进制形式下的左边部原创 2021-08-22 22:57:29 · 310 阅读 · 0 评论 -
Boyer-Moore 投票算法
摩尔投票是用于找出一串数据中,数量多于数据一半的数例题:数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。class Solution {public: int majorityElement(vector<int>& nums) { int candidate = -1; int len = nums.size();原创 2021-07-09 20:22:35 · 67 阅读 · 0 评论 -
在一个字符串中 添加n个某字符
string st = "";st += string(10 , 'a');//在st字符串末尾加上10个字符a原创 2021-07-03 20:49:13 · 811 阅读 · 0 评论 -
计算二进制下1的个数
int count = 0; while(n) { count += (n & 1); n = n >> 1; } return count; int count = 0; while(n) { n = n & (n - 1); count++; } ...原创 2021-06-23 20:19:54 · 56 阅读 · 0 评论 -
Trie(前缀树、字典树)(c++、c实现)
思维导图前缀树的核心思想是利用字符串的前缀去匹配字符串,可以不用去管那些和前缀不符的字符串,例:已有["hello" , "world" ,"happy "]我们需要检索是否已存入hello此时的Trie为匹配hellow时,从hellow的第一个前缀往后匹配现在我们来看下前缀树的c++实现代码#include<iostream>using namespace std;const int L = 26;//模拟26个字母class Trie{private原创 2021-05-25 21:48:49 · 210 阅读 · 0 评论 -
并查集
并查集:并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。常常在使用中以森林来表示。这是我百度的关于并查集的定义,在我看来并查集是把一些有关系的元素放到一个集合,这样我们就可以判断任意元素间的关系。这样我们就可以先利用已知的关系创建并查集,然后判断元素间的关系。例如有的题就会给你一堆已知关系,a和b是亲戚,b和c是亲戚,d和f是亲戚…让你判断随意给出的两个人存不存在亲戚关系。当关系网比较庞大时我们人为比较难判断,用并查集就很好解决。创建并查集我们需原创 2021-04-26 15:50:00 · 460 阅读 · 0 评论 -
最小生成树(克鲁斯卡尔算法 普里姆算法)
最小生成树是处理图结构中,简化图的算法;即删除一些边使得图得以简化,形成树结构,但应保证图中任意点都是相连通的。形成的最小生成树应该使得从顶点遍历时走过边的权值和最小。(有n个节点,则最小生成树的边数应为n-1)如:变为最小生成树后:处理最小生成树有两种方法:1.克鲁斯卡尔算法(kruskal):这种算法是先把所有的边拿出来,按其权值从小到大的顺序排列,然后从最小的边开始还原图,即按该边连接其顶点。从权值值最小的边依次连接,每次连接都要判断本次连接是否形成了环,若是,则改变没有必要还原,当还原原创 2021-04-24 11:39:20 · 21702 阅读 · 4 评论 -
树的直径(节点的最大距离)
树的直径是指相隔距离最大的两个节点间的距离,这两个节点一般是叶子节点,也有可能一个端点是根节点。求树的直径的做法:可以选取任意一点遍历整棵树,找到最远点,该点一定是直径的一个端点,再从该点再次遍历整棵树,找到最远点,则该点一定是直径的另一个端点。例题:链接问题描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重原创 2021-04-17 09:21:50 · 354 阅读 · 0 评论 -
&、|、~、、^、<<、>>运算符
这四种运算符都是在2进制的情况下进行的如10的二进制为00001010(八位)1的二进制为000000011、按位与(&):10&1的结果就是两个二进制数相同位进行按位与,即有0则结果为0,都是1则结果为10000101000000001=00000000可用来判断一个数的奇偶,如11的二进制数按位与1的二进制数00001011&00000001=00000001代码为 if (num &1 ) num为奇则为真,为偶则为假2、按位或(|):按位或与按位与原创 2021-04-10 15:32:29 · 979 阅读 · 0 评论 -
线段树
线段树 理解线段树主要是为了降低对非常庞大的数组的操作的时间复杂度,常见的操作有:对数组中的某一段元素求和。修改数组中某个指定位置元素的值。求某段元素中的最大最小值。线段数基于二叉数,它是把一个数组从中间分成两段,再往下把每段再分成两段,直到每段的数据只有一个元素,作为叶子节点,采用递归操作,递归往回走的过程中又通过叶子节点,自下往上求出其下每段数据元素的总和,下面是哔哩哔哩上的 正月点灯笼 的线段树的课程的截图:c++创建线段树代码如下:struct tree_node//可以先宏定义原创 2021-03-27 21:51:04 · 109 阅读 · 0 评论