算法总结
Skyed.blue
写写博客,记录足迹
展开
-
【dfs】深度优先遍历剖析(含泪推荐)
文章目录前言dfs原理分析dfs题型举例dfs代码细节前言我学的第一个算法就是dfs. 直到一年多后的今天,为了准备比赛我重新复习算法,我发现自己第一个学的算法,dfs,居然写的如此的慢,如此纠结。虽然最后能调试成功,但是感觉费了不少精力。一开始我准备了8道dfs复习,到最后我把这8道题用dfs统统做了四遍,用着不同的写法。终于,我明白自己为什么dfs写的如此之慢了。下面,我将我的血泪史总结出一份自己满意的答卷。dfs原理分析其实,dfs就是暴力枚举。因此题目中遇到需要枚举才能取得结果的题都可以用原创 2020-10-07 16:43:22 · 374 阅读 · 1 评论 -
【算法基础总结】算法基础 (算法竞赛,面试...)
算法基础 (By: Skyed_blue 转载注明作者)文章目录算法基础前言dfs(深度优先遍历)bfs(广度优先遍历)二分查找(二分枚举)并查集位运算双指针栈(stack)字典树(trie)前缀和初等数论贪心动态规划(dp)结语前言本篇为算法基础整合,主要偏向于对基础算法的总结和整理。本篇将会介绍个人刷算法题的一些经验,基础算法的简要描述,基础算...原创 2020-03-16 23:38:10 · 2636 阅读 · 2 评论 -
【算法总结】双指针——时间复杂度与空间复杂度的利器!
双指针,就是用两个变量在数组中经过某种形式的移动得到结果的操作。一般时间复杂度为O(n),空间复杂度O(1). 双指针用途广泛,熟悉的归并快排,二分查找就是用的双指针。下面就总结一下双指针这个算法技巧。本文双指针的内容有:双指针的各种类型。双指针的应用。第一部分:我认为双指针一般有两种类型:前后指针,左右指针。**前后指针:**也可以称为快慢指针。假设有两个指针 l 和 r ,l为...原创 2019-11-29 22:23:11 · 4850 阅读 · 0 评论 -
【算法速成】树状数组
此为算法速成blog,因此会略去一些推导细节。简介:树状数组是一个查询和插入时间复杂度都在O(logn)的数据结构。应用:主要用于查询区间和或者前n项和,但每次只能修改一个元素的值。经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以实现区间修改与区间查询)。概念:来观察这个图:令这棵树的结点编号为C1,C2…Cn. C...原创 2019-10-01 22:03:09 · 206 阅读 · 0 评论 -
【运算符】算法中的逻辑运算技巧总结
刷题的时候时常可以遇到运用逻辑运算巧妙减少复杂度的题,在此总结一下各种逻辑运算的技巧与应用。1.按位与(&)对数的二进制位进行操作,若两位同时为1,则为1,否则为0.例如: 10(1010)和5(0101), 10&5 = 0(0000)应用:取一个数在二进制下想要的位数。例如:a = 10(1010),想取a的后两位,则令b=(0011),a&b=0010. 按...原创 2019-10-30 22:30:56 · 1113 阅读 · 0 评论 -
【算法总结】二分查找详解+运用 (持续更新)
本文二分查找内容有:解读二分查找非递归代码的实现:查找值,查找左边界,查找有边界。在数组中运用C++的二分查找函数 binary_search, lower_bound, upper_bound.向量,集合里二分查找函数的运用。二分查找的运用。第一部分:1. 非递归代码实现查找值先看代码:#include <iostream>#include <algori...原创 2019-11-28 14:40:12 · 418 阅读 · 0 评论