![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
莫能长老
一只辣鸡程序猿(等水平高了就改掉简介)
展开
-
辣鸡算法(六):并查集的C++实现及优化
前言并查集(Disjoint-set) 的代码非常简洁,但是功能却很强大。关于并查集,这里有一篇文章超有爱的并查集~,讲得非常好,但是只使用了并查集两个主要优化中的"路径压缩"优化,并且我觉得很多情况下采用递归的写法要比采用循环的写法要易懂很多。本文将使用C++实现并查集并使用“按秩合并”和”路径压缩“优化并查集。我们先大概了解什么是并查集。什么是并查集(Disjoint-set)对于一个集合,我们还可以对集合S进一步划分: ,我们希望能够快速确定S中的两两元素是否属于S的同一子集。举个栗子转载 2020-06-06 13:59:33 · 617 阅读 · 0 评论 -
辣鸡算法(五):前缀和+哈希表优化
这两天做LeetCode,总是做到“前缀和”相关的题目,发现了新大陆,在此记录一下这个东西。什么是前缀和?对一个长度为n的序列nums,将它前i个值求和,得到一个大小为n的pre数组,这个数组记录的就是前缀和。上面这个定义是我自己写的,显然,这个定义是狭义的。从广义上来讲,将序列的前i个值进行任意的函数操作都可以看做是前缀和。记上面提到的函数为int f(vector<int>& pre, int i),则pre[i]=f(i)。对于将前i个值求和的做法,f函数如下所原创 2020-05-20 21:15:08 · 1034 阅读 · 1 评论 -
辣鸡算法(四):递归
这篇文章不是细致的讲述对各个问题怎么进行递归的,我们只讨论方法论。首先提一下能使用递归的条件:下两点说法来源:https://leetcode-cn.com/explore/orignial/card/recursion-i/256/principle-of-recursion/1101/一个简单的基本案例(basic case)(或一些案例) ——能够不使用递归来产生答案的终...原创 2020-05-03 10:29:49 · 170 阅读 · 0 评论 -
辣鸡算法(三):位运算小技巧
在位运算中存在一些小技巧,现记录在这篇文章中技巧一:若n为int类型,带符号。则的结果为仅保留n二进制下的最右边的1,其他位为0。原因:若n二进制表示为,则-n=~n+1,二进制表示为,二者与一下就是技巧二:若n为int类型,带符号。则的结果为将n二进制下的最右边的1变成0推论1:使n二进制下1的个数少了1,可以循环求出n二进制下1的个数。推论2:可判断n...原创 2020-05-01 16:54:42 · 143 阅读 · 0 评论 -
辣鸡算法(二):二分查找
以前呢,二分查找总是不太会。肯定有人想说二分法有什么不会的,弄个left和right表示数组两边的端点位置,然后每次,看哪个要查找的点在left和mid中间,还是再mid和right中间,根据这个改变left或mid的值就好了。那么问题来了,我原来写的时候总是出现各种错误,不知道初始化还是,不知道用还是,不知道还是,不知道查找不到的情况怎么办,也不知道循环里面或外面访问会不会越界。每次看别人写的代...原创 2020-04-30 22:43:13 · 486 阅读 · 0 评论 -
辣鸡算法(一):大数相加,相乘,求幂并取模
当计算值有可能超过int最大取值2147483647时,oj题一般会要求取模。(这里的最大取值基于int为32位整型)不妨先定义个mod//这里mod取常用的10^9+7#define mod 10000000071、大数相加#include<iostream>#include<vector>using namespace std;vector...原创 2020-02-02 21:59:10 · 1290 阅读 · 0 评论