- 博客(23)
- 收藏
- 关注
原创 并查集相关算法题
目录1.朋友圈2.冗余连接3.冗余连接II4.句子相似性II5.等式方程的可满足性6.联通网络的操作次数7.按公因数计算最大组件的大小1.朋友圈(力扣547)班上有N名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B的朋友,B 是 C的朋友,那么我们可以认为 A 也是 C的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个N * N的矩阵M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j...
2020-09-20 16:58:40 894 1
转载 并查集(Union-Find)算法介绍
本文转载于:https://blog.csdn.net/dm_vincent/article/details/7655764,仅作为个人日后复习查阅,侵删。本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。更多的信息可以参考Algorithms一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。原文中更多的是给出一些结论,我尝试给出一些思路上的过程,即为什么要使用这个方法,而不是别的什么方法。我觉得这个可能更加有意义一些,.
2020-09-20 16:36:27 267
转载 正确理解MySQL的MVCC及实现原理
MVCC多版本并发控制目录MVCC多版本并发控制前提概要什么是MVCC?什么是当前读和快照读?当前读,快照读和MVCC的关系MVCC的实现原理隐式字段undo日志Read View(读视图)整体流程MVCC相关问题RR是如何在RC级的基础上解决不可重复读的?RC,RR级别下的InnoDB快照读有什么不同?转载于:https://blog.csdn.net/SnailMann/article/details/94724197?utm_medium=d
2020-09-15 10:06:37 3206 1
原创 ConcurrentHashMap底层实现原理及扩容机制
目录前言ConcurrentHashMapJDK1.7的实现初始化put操作get操作size操作JDK1.8的实现NodeTreeNodeput操作get函数replaceNode函数扩容机制扩容时读写操作的处理总结前言我们都知道HashMap在多线程情况下,在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其
2020-09-04 17:21:36 2532
转载 HashMap底层实现原理及扩容过程
目录一、hash函数实现二、HashMap内部哈希数组的长度为什么要取2的幂三、哈希数组的扩容1、什么时候触发扩容?2、扩容做什么事情?1)新hash数组初始化2)已存储键值对重新散列四、HashMap存储原理1、put操作1)hash数组索引位置为null2)索引位置第一个节点key与要存储的键值对key相等3)要存储的位置已经是树节点4)普通节点2、get操作五、与JDK1.7的差异Map存储键值对,并且实现方式相对于List来说要复杂很多
2020-09-04 16:10:58 2790
原创 力扣刷题系列——字符串相关
字符串相关算法题1.有效的字母异位词力扣242:https://leetcode-cn.com/problems/valid-anagram/description/给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = "anagram", t = "nagaram" 输出: true示例 2:输入: s = "rat", t = "car" 输出: false题解:可以用 HashMap 来映射字符与出现次数,然后比较两个.
2020-08-30 21:11:58 468
原创 力扣刷题系列——数组与矩阵
数组与矩阵相关算法题1.移动零力扣283:https://leetcode-cn.com/problems/move-zeroes/description/给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12] 输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。代码实现:public void moveZeroes(int[] nums) {
2020-08-30 17:43:50 485
原创 力扣刷题系列——贪心思想II
贪心算法及经典例题(二)1.分发饼干力扣455:https://leetcode-cn.com/problems/assign-cookies/假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj。如果 sj >= gi,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数...
2020-08-27 15:47:58 1933
转载 力扣刷题系列——贪心思想I
贪心算法及经典例题(一)以下内容参考于:https://www.jianshu.com/p/d69229f0bc99与https://blog.csdn.net/qq_15054345/article/details/89514163,仅作为个人日后复习查阅。贪心贪心算法总是作出在当前看来最好的选择,也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。只有在满足最优子结构的情况下贪心算法得到的结果才是最优结果。比如找钱的问题,我要给你一百,那么我尽可能每..
2020-08-27 15:12:54 395
原创 力扣刷题系列——回溯算法II
回溯算法思想及经典例题(二)Backtracking(回溯)属于 DFS。普通 DFS 主要用在可达性问题,这种问题只需要执行到特点的位置然后返回即可。 而 Backtracking 主要用于求解排列组合问题,例如有 { 'a','b','c' } 三个字符,求解所有由这三个字符排列得到的字符串,这种问题在执行到特定的位置返回之后还会继续执行求解过程。因为 Backtracking 不是立即返回,而要继续求解,因此在程序实现时,需要注意对元素的标记问题:在访问一个新元素进入新的递归调...
2020-08-25 21:22:26 479
原创 力扣刷题系列——回溯算法I
回溯算法思想及经典例题(一)回溯法可以提前看看公众号文章:https://mp.weixin.qq.com/s/g5uvxi1lyxmWC4LtP0Bdlw(从二叉树遍历到回溯算法,包含例题:二叉树路径和等于给定目标值的路径(力扣113)、集合的所有子集合列表(力扣78))1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到...
2020-08-25 20:33:26 1308
原创 力扣刷题系列——分治算法
分治法的基本思想及算法题分治法1.基本思想(1) 将求解的较大规模的问题分割成k个更小规模的子问题。(2) 对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。(3) 将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。2.适用条件分治法所能解决的问题一般具有以下几个特征:I.该问题的规模缩小到一定的程度就可以容易地解决;II.该问题可以分...
2020-08-25 17:08:47 1039
原创 力扣刷题系列——BFS和DFS
BFS与DFS相关算法题BFS广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历算法这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中
2020-08-25 15:28:56 2338
转载 力扣刷题系列——动态规划II
常见的动态规划问题(二)本文转载于GitHub地址:https://github.com/CyC2018/CS-Notes/,仅作为个人日后复习。整合了多方面的资料,侵删。引例解析:内容来源于公众号文章:https://mp.weixin.qq.com/s/lKQI0aS1MBwfPujC-m_zkA运用动态规划四部曲来进行解答://解法一public int coinChange(int[] coins, int amount) { // 子问题: ...
2020-08-19 19:41:18 1613
原创 力扣刷题系列——动态规划I
常见的动态规划问题本文转载于GitHub地址:https://github.com/CyC2018/CS-Notes/,仅作为个人日后复习。Dynamaic Programming定义:动态规划是运筹学中用于求解决策过程中的最优化数学方法。作为算法设计技术,是一种使用多阶段决策过程最优的通用方法。是解决最优化问题的重要工具。动态规划的特性:无后效性 最优子结构如何设计DP动态规划的本质,是对问题状态的定义和状态转移方程的定义1.设计状态,实现状态的定义 2.找到状态
2020-08-17 22:34:05 2279
转载 力扣刷题系列——贪心思想
贪心思想常见算法题以下内容为从GitHub中转载而来,仅供个人日后复习之用,GitHub仓库地址:https://github.com/CyC2018/CS-Notes。贪心思想:保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。1.分配饼干455. Assign Cookies (Easy)假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j .
2020-08-15 20:45:55 534
原创 力扣刷题系列——位运算篇
几道常见的位运算算法题以下均为接触的力扣原题,作一个总结,以便日后复习。1.不用加号的加法设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。示例:输入: a = 1, b = 1输出: 2提示: 1)a,b均可能是负数或 0 2)结果不会溢出 32 位整数关键点:1、 a^b 计算没有进位的加法结果 2、 a&b 计算所有进位的位,左移再亦或就是进一位的结果,以此类推代码实现:class Solution { public...
2020-08-14 22:16:09 1389
原创 力扣刷题系列——数学问题篇
常见的数学相关算法题以下算法题均为力扣原题,对日常刷题过程中遇到的相关算法题作一个归纳,以便日后复习之用。1.x的平方根实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去。代码实现:class Solution {...
2020-08-14 19:31:05 979
原创 二叉树高频算法题
二叉树高频算法题以下算法题均为力扣原题,对自己刷过的一些二叉树相关算法题做一个总结,便于日后复习。定义一棵二叉树:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }1.双遍历序列构造二叉树1.1.从前序遍历和中序遍历构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元
2020-08-12 16:10:13 1134
原创 二叉树的四种遍历方式(Java实现)
二叉树遍历方式创建二叉树实体类:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}1.前序遍历前序遍历打印结点顺序:中 左 右递归实现: /** * 递归前序遍历 * @param root */ public void preOrder(TreeNode root)
2020-08-11 16:27:32 662
原创 链表相关算法题(Java实现)
链表相关算法题以下题目均为力扣原题,解法参考评论区大佬,仅作为个人日后复习之用。1.链表反转定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL代码实现:class Solution { public ListNode reverseList(ListNode head) {
2020-08-10 16:08:10 1667
转载 查找算法(含Java实现)
几种常见的查找算法参考文章https://blog.csdn.net/weixin_39241397/article/details/79344179?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFr
2020-08-09 19:47:20 475 1
转载 几种常见的排序算法
排序算法归纳参考博客https://www.cnblogs.com/guoyaohua/p/8600214.html,文章仅作为自己日后复习总结,不作其他用途。目录排序算法归纳1.排序算法性能总览2.冒泡排序(稳定)3.选择排序(不稳定)4.插入排序(稳定)5.希尔排序(不稳定)6.快速排序(不稳定)7.归并排序(稳定)8.基数排序(稳定)9.堆排序(不稳定)10.计数排序(稳定)11.桶排序(稳定)12.基数排序 vs 计数排序 vs 桶排序
2020-08-09 15:58:33 502
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人