算法
HOLD ON!
莫见长安行乐处,空令岁月易蹉跎。
展开
-
基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)
基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)安然若知12018.07.13 08:38:53字数 753阅读 101,761 深度优先搜索和广度优先搜索,都是图形搜索算法,它两相似,又却不同,在应用上也被用到不同的地方。这里拿一起讨论,方便比较。一、深度优先搜索 深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应...转载 2020-08-13 09:34:55 · 19562 阅读 · 9 评论 -
Leetcode-填充每个节点的下一个右侧节点指针,层次遍历
填充每个节点的下一个右侧节点指针力扣官方题解发布于20 小时前12.5k官方CC++GoJavaJavaScriptPython3树链表方法一:层次遍历思路与算法题目本身希望我们将二叉树的每一层节点都连接起来形成一个链表。因此直观的做法我们可以对二叉树进行层次遍历,在层次遍历的过程中将我们将二叉树每一层的节点拿出来遍历并连接。层次遍历基于广度优先搜索,它与广度优先搜索的不同之处在于,广度优先搜索每次只会取出一个节点来拓展,而层次遍历会每次将队列中的所有元素都拿出来拓展,这样能保证每次从.转载 2020-10-15 20:33:32 · 141 阅读 · 0 评论 -
Leetcode-100.相同的树
Leetcode-100.相同的树力扣官方题解发布于2020-08-0618.4k官方CC++GoJavaPython深度优先搜索广度优先搜索递归前言两个二叉树相同,当且仅当两个二叉树的结构完全相同,且所有对应节点的值相同。因此,可以通过搜索的方式判断两个二叉树是否相同。方法一:深度优先搜索如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相.转载 2020-10-01 20:56:23 · 223 阅读 · 0 评论 -
算法-几种自旋锁的java实现
几种自旋锁的java实现王帅199207122018.12.04 18:05:32字数 1,547阅读 12,352简单自旋锁(可重入)自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。自旋锁适用于锁保护的临界区很小的情况,临界区很小的话,锁占用的时间就很短。public class SpinLock implements Lock { /** * use thread itself as转载 2020-09-25 09:16:54 · 507 阅读 · 2 评论 -
偏向锁原理
偏向锁原理persisting_关注0.0932019.01.26 18:58:40字数 2,554阅读 3,2381 概述本文介绍偏向锁相关原理,并不限定于Java中的偏向锁,但是Java中偏向锁的实现也是相同的原理,本文主要是对参考文献(Quickly Reacquirable Locks)中偏向锁实现重点部分的翻译,加入了自己的理解,参考文献称偏向锁为可快速获取的锁(QRL,Quickly Reacquirable Locks)。如何快速获取将会在第2节介绍过相关数据结构之后介绍。偏向转载 2020-09-24 22:30:59 · 474 阅读 · 0 评论 -
LeetCode翻转二叉树
LeetCode翻转二叉树226. 翻转二叉树难度简单610翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1力扣官方题解方法一:递归思路与算法这是一道很经典的二叉树问题。显然,我们从根节点开始,递归地对树进行遍历,并从叶子结点先开始翻转。如果当前遍历到的节点\textit{roo.转载 2020-09-16 18:26:50 · 116 阅读 · 0 评论 -
雪花算法的原理和实现Java
雪花算法的原理和实现Java雨夜青草SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。给大家举个例子吧,比如下面那..转载 2020-09-04 19:47:04 · 392 阅读 · 0 评论 -
LeetCode-叶子相似的树
叶子相似的树力扣 (LeetCode)方法:深度优先搜索思路和算法首先,让我们找出给定的两个树的叶值序列。之后,我们可以比较它们,看看它们是否相等。要找出树的叶值序列,我们可以使用深度优先搜索。如果结点是叶子,那么dfs函数会写入结点的值,然后递归地探索每个子结点。这可以保证按从左到右的顺序访问每片叶子,因为在右孩子结点之前完全探索了左孩子结点。class Solution {public: bool leafSimilar(TreeNode* root1, Tree..转载 2020-09-02 13:29:40 · 118 阅读 · 0 评论 -
算法-有限状态机FSM详解及其实现
有限状态机FSM详解及其实现有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为“起转载 2020-09-02 12:54:17 · 4615 阅读 · 0 评论 -
LeetCode-415.字符串相加
给定两个字符串形式的非负整数num1 和 num2, 计算他们的和.注意:num1和num2的长度都小于5100. num1和num2的都只包含数字0-9 num1和num2都不包含前导零 你懂得方法一:模拟思路与算法我们只需要对两个大整数模拟[竖式加法]...转载 2020-08-04 21:14:55 · 116 阅读 · 0 评论 -
算法-并查集
一个非常实用而且精妙的算法-并查集(java语言实现)愚公要移山1发布时间:19-12-0218:28科技达人,优质创作者在学习数据结构的时候,老师多少会提到并查集,他的应用也是超级广泛。本文首先会通过案例来对并查集有一个介绍。然后给出并查集的java实现。一、并查集原理话说在江湖上有很多门派,这些门派相互争夺武林霸主。毕竟是江湖中人,两个人见面一言不合就开干。但是打归打,总是要判断一下是不是自己人,免得误伤。于是乎,分了各种各样的门派,比如说张无忌和杨过俩人要打架,就先看看是.转载 2020-07-10 16:12:26 · 129 阅读 · 0 评论 -
KMP算法
KMP算法迷亭1213摘要KMP算法,又称模式匹配算法,能够在线性时间内判定字符串 T 是否为 S 的子串,并求出字符串 T 在 S 中各次出现的位置。KMP算法比较晦涩难懂。本文对于思想介绍略简,侧重于实现。问题模型与算法思路问题模型: 给定两个字符串 S 和 T ,试求出 T 在 S 中第一次出现的位置。上述问题模型是模式串匹配最基础的模型,即单模式串匹配问题,这类问题是KMP算法以及字符串Hash大展身手的题型。算法思路1:Hash设|S| = n , |T| = m。如果不转载 2020-06-29 20:45:18 · 190 阅读 · 0 评论 -
BitMap的原理和实现
BitMap的原理和实现相关概念 基础类型 在java中: byte -> 8 bits -->1字节char -> 16 bit -->2字节short -> 16 bits -->2字节int -> 32 bits -->4字节float -> 32 bits -->4字节long -> 64 bits -->8字节 位运算符 在java中,int转载 2020-06-12 18:36:41 · 337 阅读 · 0 评论 -
BitMap原理
BitMap原理菜six岁关注32018.09.05 15:40:57字数 1,345阅读 44,588经常能够看到有些大厂的面试题里有一些这样的题目:一个10G的文件,里面全部是自然数,一行一个,乱序排列,对其排序。在32位机器上面完成,内存限制为 2G。首先来分析一下题目,10G的文件,只有2G内存,显然,不可能一次性把数据放入内存中直接排序。那么,还有什么其他办法呢?遍寻资料,可以发现大致有两种解决方案:1、把大文件分成多个小文件,分别排序,到最后合并成一个文件(我暂时还没搞.转载 2020-06-12 18:35:01 · 230 阅读 · 0 评论 -
归并排序(JS)
归并排序(JS)Jane_96 2019-03-25 19:10:49 4365 收藏 1展开归并排序(从小到大)算法复杂度:最好情况:O(nlogn) 最坏情况:O(nlogn) 平均情况:O(nlogn) 空间复杂度:O(n) 稳定性:稳定function mergeSort(arr, start, end) { if (start >= end) { return; } let mid = start...转载 2020-06-09 21:44:39 · 161 阅读 · 0 评论 -
算法-插入排序
基本思想把n个元素的数列分成有序(前)和无序(后)的两部分{{a1},{a2,a3,a4,…,an}}{{a1⑴,a2⑴},{a3⑴,a4⑴ …,an⑴}}…{{a1(n-1),a2(n-1) ,…},{an(n-1)}}每次处理就是将无序的数列中第一个元素与有序数列的元素从后到前比较,找到插入位置,将该元素插入到有序数列的适当的最终的位置上(稳定排序)。参考代码一#include <iostream>#include <cstdlib>using转载 2020-06-07 15:40:39 · 109 阅读 · 0 评论 -
复制带随机指针的链表
复制带随机指针的链表力扣 (LeetCode)发布于2019-06-1023.1k官方Java图链表Python首先,我们来看一下有向链表:在上图中,对于一个节点,它的next指针指向链表中的下一个节点。next指针是通常有向链表中有的部分且将所有节点链接起来。图中有趣的一点,也是这题有趣的一点在于random指针,正如名字所示,它可以指向链表中的任一节点也可以为空。方法 1:回溯想法回溯算法的第一想法是将链表想象成一张图。链表中每个节点都有 2 个指针(图中的...转载 2020-06-06 22:08:45 · 140 阅读 · 0 评论 -
15. 三数之和
15. 三数之和难度中等2085给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]三数之和题解王德福发布于1 年前156.1k精选JavaScript...转载 2020-05-11 22:24:52 · 301 阅读 · 0 评论 -
二叉树的最近公共祖先
二叉树的最近公共祖先力扣官方题解发布于3 天前13.1k官方C++GoJavaJavaScript树递归方法一:递归思路和算法我们递归遍历整棵二叉树,定义f_xfx表示xx节点的子树中是否包含pp节点或qq节点,如果包含为true,否则为false。那么符合条件的最近公共祖先xx一定满足如下条件:(f_{\text{lson}}\ \&\&\ f_{\text{rson}})\ ||\ ((x\ =\ p\ ||\ x\ =\ q)\ \&am...转载 2020-05-11 22:22:59 · 288 阅读 · 0 评论 -
Floyd算法详解——包括解题步骤与编程
Floyd算法详解——包括解题步骤与编程SweeNeil展开一、Floyd算法原理Floyd算法是一个经典的动态规划算法,它又被称为插点法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。Floyd算法是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,算法目标是寻找从点i到点j的最短路径。从任意节点i到任意节点j的最短...转载 2020-05-04 21:12:20 · 1269 阅读 · 0 评论 -
快乐数-用 HashSet 检测循环
方法一:用 HashSet 检测循环我们可以先举几个例子。我们从 77 开始。则下一个数字是 4949(因为 7^2=4972=49),然后下一个数字是 9797(因为 4^2+9^2=9742+92=97)。我们可以不断重复该的过程,直到我们得到 11。因为我们得到了 11,我们知道 77 是一个快乐数,函数应该返回 true。再举一个例子,让我们从 116116 ...转载 2020-04-30 22:58:47 · 441 阅读 · 0 评论 -
最小生成树(普里姆算法)
最小生成树(普里姆算法)奶茶别加糖 最后发布于2018-10-30 16:51:27 阅读数 24529 收藏 37展开这个算法不好理解,我也是在csdn上看了一个博主写的文章才稍微理解了一点,需要的请移步这位博主的博客最小生成树Prim算法理解,写的非常好,很容易理解。我这里纯粹就是记录一下加深自己的印象,不懂的真的可以去看看这位博主的解释。一个有 n 个结点的连通图的生成树是原图的...转载 2020-04-20 14:20:50 · 781 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
图的深度优先遍历和广度优先遍历深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。我们来到一个游乐场,游乐场里有11个景点。我们从景点0开始,要玩遍游乐场的所有景点,可以有什么样的游玩次序呢?深度优先遍历二叉树的前序、中序、后序遍历,本质上也可以认为是深度优先遍...转载 2020-04-20 14:18:57 · 574 阅读 · 0 评论 -
最小编辑距离算法 Edit Distance(经典DP)
最小编辑距离算法 Edit Distance(经典DP)转载baodream最后发布于2018-05-23 11:36:32阅读数 22226收藏展开编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两...转载 2020-04-06 08:31:01 · 2510 阅读 · 0 评论 -
快速幂算法(全网最详细地带你从零开始一步一步优化)
快速幂算法(全网最详细地带你从零开始一步一步优化)原创刘扬俊 最后发布于2019-01-03 15:00:13 阅读数 9283 收藏展开快速幂算法——带你从零开始一步一步优化目录快速幂算法——带你从零开始一步一步优化什么是快速幂算法再次思考快速幂算法初步入门压榨性能再优化终极优化参考资料...转载 2020-03-24 21:10:12 · 482 阅读 · 0 评论 -
算法-双指针技巧汇总
双指针技巧汇总我认为双指针技巧还可以分为两类,一类是「快慢指针」,另一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。一、快慢指针的常见算法快慢指针一般都初始化指向链表的头结点 head,前进时快指针 fast 在前,慢指针 slow 在后,巧妙解决一些链表中的问题。1、判定链表中是否含有环这...转载 2020-03-17 09:22:37 · 209 阅读 · 1 评论 -
算法-贪心算法
贪心算法贪心算法简介: 贪心算法是指:在每一步求解的步骤中,它要求“贪婪”的选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解。 贪心算法每一步必须满足一下条件:可行的:即它必须满足问题的约束。 局部最优:他是当前步骤中所有可行选择中最佳的局部选择。 不可取消:即选择一旦做出,在算法的后面步骤就不可改变了。贪心算法案例:1.活动选择问题 ...转载 2019-05-31 22:27:01 · 125 阅读 · 0 评论 -
算法-希尔排序
五分钟学会一个高难度算法:希尔排序五分钟学算法关注由于LeetCode上的算法题很多涉及到一些基础的数据结构,为了更好的理解后续更新的一些复杂题目的动画,推出一个新系列 -----《图解数据结构》,主要使用动画来描述常见的数据结构和算法。本系列包括十大排序、堆、队列、树、并查集、图等等大概几十篇。希尔排序希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是...转载 2020-01-06 16:49:07 · 152 阅读 · 0 评论 -
螺旋矩阵的几种打印形式
螺旋矩阵的几种打印形式原创LQC_SUSER 发布于2018-08-06 21:39:43 阅读数 958 收藏展开#include<stdio.h>int a[10][10];void SpiralMatrix1(int N)//从左上角开始顺时针旋转{ int i,j,tp=1; for(i=0;i<N/2;i++)//最外层控制圈数 {...转载 2020-01-02 08:21:31 · 254 阅读 · 0 评论 -
算法-排序算法
十大经典排序算法(动图演示)0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 ...转载 2019-01-31 21:59:26 · 669 阅读 · 1 评论 -
滑动窗口算法(一)
滑动窗口算法(一)某日事不多,点开sentinel-core代码学习,想看看qps、rt等是怎么统计的。点开StatisticSlot类,发现里面是用DefaultNode增加qps,然后尝试点开DefaultNode->StatisticNode->ArrayMetric->MetricsLeapArray->LeapArray...晕...怎么这么多类-...转载 2019-12-10 16:59:36 · 167 阅读 · 0 评论 -
动态规划入门到熟悉,看不懂来打我啊
动态规划入门到熟悉,看不懂来打我啊兔子hebtu666本文链接:https://blog.csdn.net/hebtu666/article/details/1005851362.1斐波那契系列问题2.2矩阵系列问题2.3跳跃系列问题3.1 01背包3.2 完全背包3.3多重背包3.4 一些变形选讲2.1斐波那契系列问题在数学上,斐波纳契数列以...转载 2019-12-04 08:08:14 · 539 阅读 · 0 评论 -
HashTable 散列表
HashTable 散列表2018-12-09 17:52:24aaa_dai阅读数 77文章标签:散列函数散列表hashtable更多分类专栏:Data-structure/Algorithm版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/sgs595595/...转载 2019-11-03 22:47:46 · 136 阅读 · 0 评论 -
程序员必须掌握的核心算法有哪些?
程序员必须掌握的核心算法有哪些?置顶2019-10-21 12:11:41帅地阅读数 495文章标签:算法数据结构与算法更多分类专栏:数据结构与算法版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/m0_37907797/article/details/1026...转载 2019-10-22 08:20:48 · 209 阅读 · 0 评论 -
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路分类编程技术算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来。快速排序使...转载 2019-06-02 10:15:13 · 147 阅读 · 0 评论 -
贝叶斯算法
贝叶斯算法2016年10月09日 21:48:54ldon阅读数:5693版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_27935693/article/details/527709001.3、贝叶斯分类的基础——贝叶斯定理 每次提到贝叶斯定理,我心中的崇敬之情都油然而生,倒不是因为这个定理多高深,而是因...转载 2019-06-01 21:15:08 · 314 阅读 · 0 评论 -
遗传算法详解(GA)(个人觉得很形象,很适合初学者)
遗传算法详解(GA)(个人觉得很形象,很适合初学者)2018年03月30日 21:11:39HowieMen阅读数:32365转载自https://blog.csdn.net/u010451580/article/details/51178225本文是去年课题组周报中的一个专题讲解,详细讲了GA,由于是周报,所以十分详细。很适合初学者入门。文中也简单提及了模拟退火算法。文章综合参考...转载 2019-06-06 23:03:30 · 2250 阅读 · 0 评论 -
斐波那契数列算法分析
斐波那契数列算法分析2012年09月28日 21:06:34love_gg阅读数:501标签:算法matrix测试语言工作c更多个人分类:C/C++编程斐波那契数列算法分析背景:假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二月结束时,雌兔子产下另一对兔子,过了一个月后它们也开始繁殖,如此这般持续下去。每只雌兔在开始繁殖时每月都产下一对兔子,假...转载 2019-05-16 21:21:57 · 635 阅读 · 0 评论 -
流程图,你真的会画了吗?
流程图,你真的会画了吗?冰冷_关注1.02019.01.04 19:48*字数 1486阅读 626评论 0喜欢 6身为产品经理,思维导图、原型图、流程图是必备技能,相信大多数人都认为绘制流程图很简单,不就是一个开始,一个结束,中间加上诸多的进程和判断,但是想要画好流程图,可不止我们认识的那么粗浅。接下来,我根据自身的实践经验,以及学习的一些课程,跟大家分享下画好流程图的一...转载 2019-07-24 10:25:30 · 520 阅读 · 0 评论 -
回溯算法
回溯算法编辑讨论本词条由“科普中国”科学百科词条编写与应用工作项目审核 。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯...转载 2019-07-19 22:43:27 · 176 阅读 · 0 评论