自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最小生成树

最小生成树给你一个n个点m条边的带权无向图,请你找出能够连接所有边且权重最小的边,如果不能则指明。最小生成树是一道经典的图论算法题,主要的求解方法有两个,一个是Kruskal算法,另一个是prim算法。时间复杂度分别为O(ElogE)O(ElogE)O(ElogE),O(ElogV)(堆优化)O(ElogV)\text{(堆优化)}O(ElogV)(堆优化)。这两种算法一个用了并查集,一个用了优先队列,共同点是都用到了贪心思想。最终得到的边的数量一定是V−1V - 1V−1条。Kruskal算法K

2021-05-15 15:06:15 113

原创 位运算

文章目录位运算的各种姿势姿势1(x & 1):姿势2(x & -x):姿势3(0 ^ x):姿势4(1 ^ x):姿势5((var ^ (var >> bit)) - (var >> bit)):姿势6(两个数的最大值):姿势7:两数相加姿势8:(num & x)姿势9:(求区域异或)姿势10:(提取最高位的1)姿势11:(1的所有子集)姿势12:(快速乘)位运算的各种姿势LeetCode官方解释:位操作(Bit Manipulation)是程序设计中对

2021-05-15 15:05:44 298

原创 快速排序

快速排序快速排序是目前已知的最快的排序算法,它是非稳定的,原地的。它的时间复杂度平均情况下是O(nlogn)O(nlogn)O(nlogn),最差情况下是O(n2)O(n^2)O(n2)。虽然如此,但是最坏情况是非常难达到的,而因为快速排序非常的紧凑,所以他成了最快的排序算法。不过,快速排序也有缺点,由于不是稳定的排序算法,所以在很多情况下不可以使用快速排序。模版:判题地址:acwing:785. 快速排序c++代码:#include <iostream>using namespa

2021-05-15 15:05:11 136

原创 归并排序

文章目录归并排序模版归并排序归并排序同样也是非常常用的排序方法之一,它的速度没有快速排序快,但是它依然有自己的优势。归并排序的时间复杂度是O(nlogn)O(nlogn)O(nlogn),它和快速排序的复杂度相同,但是没有快速排序那么紧凑,尽管快速排序的最坏情况是O(n2)O(n^2)O(n2)。但是它有一点是快速排序没有的,就是归并排序是稳定的排序算法,这一点非常重要。然而归并排序也有缺点,就是归并排序不是原地排序算法,这就导致了归并排序的空间复杂度是O(n)O(n)O(n),在计算大型数组的时候内

2021-05-15 15:04:18 156

原创 反转链表

文章目录反转链表算法原理代码CppJavaPython反转链表将一个链表原地反转,不可以修改其中的值。非常简单但细节复杂,我这里介绍一个非常好用的模板,100%你记得住。算法原理我们使用三个指针pre, cur, nex指向链表,这三个指针一定在链表中是连续的,除了第一次初始化的时候。开始,我们将pre和cur置为null,原因是我们要将原来的第一个节点的next置为null,因为反转后它会变成最后一个,如果不去掉链表最后会打结,变成环状链表。然后nex我们置为链表的头结点,其实不一定是头结点,如果

2021-05-15 15:03:45 393

原创 大数运算

文章目录大数运算加法减法乘法除法大数运算除了Python外,像java,c++ 的数据都是由数据范围的,在进行超大数字的运算时明显是无法计算出正确答案的。因此我们需要自己写出超长位数的大数字的加减乘除四则运算。(Java精确运算的api,c++没有)加法进行加法计算最简单,我们维护一个val变量,将对应位数相加,当前位数的答案等于val模10,进位等于val除以10。最后再把字符串翻转过来就是答案。#include <iostream>#include <algorithm&g

2021-05-15 15:03:27 186

原创 并查集

文章目录模板:并查集模板:模板:并查集什么是并查集?LeetCode官方解释:在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(Union-find Algorithm)定义了两个用于此数据结构的操作:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构(Union-find Data S

2021-05-15 15:01:28 72

原创 Trie树

文章目录Trie树实现原理代码模板Trie树Trie树,又叫单词查找树,前缀树。是一种非常高效的储存字符串的数据结构。它可以在O(n)(n为查找字符串的长度)O(n)\text{(n为查找字符串的长度)}O(n)(n为查找字符串的长度)时间复杂度内进行增删改查,非常的快。即使字符串变多,它的效率也不会降低。实现原理顾名思义,Trie树就是一颗树,这颗树有多少个节点?如果你存的字符串里的字符包括ASCII码,那么每个节点就有128或者256个子节点,如果你查找的字符串都是由26个小写(或者大写)字母组

2021-05-15 15:00:21 80

原创 Manacher 算法(马拉车)

文章目录Manacher 算法(马拉车)思路:问题:问题一:问题二:代码模板Manacher 算法(马拉车)Manacher算法,中文名叫马拉车,是解决找出最长回文子串等这些问题最快的算法,时间复杂度逼近线性。首先要理解Manacher算法,需要先知道中心扩展法。判题工具参考LeetCode第5题:最长回文子串暴力寻找最长回文子串的方式就是穷举每一个子串,非常慢。一个简单的优化就是以每个字符或者相邻两个字符的中间作为可能的最长回文子串的中心,向左右两边扩展。这样我们就可以避免判断毫无意义的子串

2021-05-15 14:59:13 350

原创 二叉树的中序遍历

题目:二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?来源:力扣(LeetCode)第94题链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal分析:两种方法,一种是最常用的递归遍历,非常简单。第二种是迭代遍历,

2021-05-15 14:54:19 139

空空如也

空空如也

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

TA关注的人

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