![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法是程序员的基础,一定得掌握。
ewenll
前路漫漫,当克己,当慎独。
展开
-
线程安全的集合
1. 什么是线程安全线程安全就是在并发环境下(多个线程同时执行),程序能够按照我们预期的行为去正确的执行,不会出现数据不一致或污染的情况。2. CopyOnWriteArrayListArrayList,相信大家都使用过,并且都知道是线程不安全的,下面来看一下,当有多个线程向ArrayList中添加元素的时候会发生什么情况?执行上面的代码,会报 java.util.ConcurrentModificationException (并发修改异常)那么怎么才能让ArrayList实现线程安全呢?第原创 2020-11-17 21:49:34 · 3597 阅读 · 2 评论 -
一篇文章,彻底解决KMP
本文主要介绍了字符串查找算法KMP以及代码实现。原创 2020-08-28 22:10:34 · 389 阅读 · 0 评论 -
二叉树相关算法题总结
本文为博主刷到的二叉树相关算法题的总结。原创 2020-08-28 00:00:09 · 923 阅读 · 2 评论 -
剑指Offer 14——剪绳子
文章目录1. 剑指Offer 14- I 剪绳子1.1 递归1.2 动态规划1.3 贪心2. 剑指Offer 14.II ——剪绳子1. 剑指Offer 14- I 剪绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输原创 2020-07-15 16:49:17 · 119 阅读 · 0 评论 -
你必须掌握的,快速幂算法
快速幂算法,在刷题或者面试中会经常遇到,这篇文章,能够让你理解快速幂算法,以及会实现快速幂算法原创 2020-07-15 11:13:06 · 561 阅读 · 12 评论 -
最小路径和问题(动态规划)
文章目录题目解题思路代码递归解法记忆化算法动态规划题目给你一个二维数组,二维数组中的每个数都是正数,要求从左上 角走到右下角,每一步只能向右或者向下。沿途经过的数字要累 加起来。返回最小的路径和。示例:这里二维数组写成矩阵的形式,1,2,3,46,3,5,14,2,1,6最小路径和为1 + 2 + 3 + 2 + 1 + 6 = 15解题思路当点走到最后一行时,就只能往右走,当点走到最后一列时,只能往下走,当点不在最后一行或者最后一列时,应该往右面和下面的点中,数字小的点走。代码原创 2020-07-13 11:57:07 · 629 阅读 · 0 评论 -
前缀树介绍及代码实现
文章目录1. 前缀树介绍2. 前缀树结构3. 前缀树代码实现1. 前缀树介绍又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。前缀树,就是根据字符串中的每一个字符来到达相应的结点,所以比较适合统计或者查找字符串。如果使用数组存储字符串的话,每次统计或者查找,都要遍历整个数组,而是用前缀树原创 2020-07-07 12:00:01 · 353 阅读 · 0 评论 -
面试常问的排序算法分析及代码实现
本文介绍了七种常用的排序算法,这些排序算法,都非常的基础,必须要掌握。原创 2020-07-05 08:21:59 · 133 阅读 · 0 评论 -
并查集及代码实现
文章目录1. 并查集1.1 并查集的概念1.2 并查集的实现思路1.3 代码1. 并查集1.1 并查集的概念并查集也是一种数据结构,主要有两个操作,集合的合并,判断两个元素是否属于同一个集合,是一种逻辑结构。1.2 并查集的实现思路并查集的底层实现有多重方式,可以使用数组、List、树等等,选择的依据是哪种实现方式可以让操作的复杂度小。可以使用一种特殊的树来实现并查集如图,每一个结点都有一个父结点,最后一个结点的父节点指向自己,也是这个集合的代表结点,判断两个元素是否属于同一个集合,就是判断这两个原创 2020-07-04 08:51:02 · 498 阅读 · 0 评论 -
深度 / 广度优先算法题总结
文章目录剑指 Offer 13. 机器人的运动范围剑指 Offer 13. 机器人的运动范围地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例原创 2020-07-03 17:34:07 · 392 阅读 · 0 评论 -
动态规划及相关算法题总结
本文介绍了动态规划及一些经典算法题,动态规划,只有多做几道题,才能够理解。原创 2020-06-30 10:54:13 · 401 阅读 · 1 评论 -
链表相关算法题总结
链表的问题比较常见,这种问题一般比较考验代码能力,这篇文章,总结了几道常见的链表题,思路不难,难的是代码。原创 2020-06-24 14:33:33 · 456 阅读 · 13 评论 -
栈和队列的相关算法题
栈和队列,两种非常常见的数据结构,面试中也会经常被问到,希望这篇文章能够帮助到你。原创 2020-06-22 14:48:56 · 525 阅读 · 0 评论 -
二叉树的遍历实现
二叉树的遍历是非常基础的内容,面试中,也会经常问到,希望这篇文章,对你有帮助。原创 2020-06-21 18:44:52 · 298 阅读 · 0 评论 -
优先队列源码分析及相关算法题
优先队列这种数据结构很有用,能够帮助我们解决很多算法题。原创 2020-06-20 14:24:29 · 309 阅读 · 0 评论 -
HashMap底层原理及源码分析(详细)(jdk1.7 && jdk 1.8)
jdk1.8中的HashMap底层原理是在jdk1.7的基础上改进的,所以,建议先了解jdk1.7的底层原理,先熟悉jdk1.7 的源码首先大致了解一下HashMap的实现原理,1.7中HashMap是采用数组加链表的方式实现的,因为HashMap存储元素是按key和value 的形式存储,HashMap中就定义了一个Entry类来封装元素的key和value,并且实现链表,定义一个Entry类...原创 2020-03-27 18:42:35 · 1008 阅读 · 13 评论 -
一篇文章让你彻底理解ConcurrentHashMap(jdk 1.8)
1.为什么要用ConcurrentHashMapHashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁住了,全表锁),当多线程并发的情况下,都要竞争同一把锁,导致效率极其低下。而在JDK1.5后为了改进Hashtable的痛点,Co...原创 2020-05-07 18:38:00 · 2877 阅读 · 22 评论 -
某银行初试代码题 Java找素数
今天参加某行Java暑期实习生的面试,被最后一道找素数的代码题给整懵了,我也太菜了[流下了没有技术的眼泪]。文章目录题目解题思路代码题目找出200-300之间的素数,并打印解题思路首先要明白什么是素数,我确实有点记不清了。。。那么什么是素数呢?素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。那怎么判断一个数是不是素数呢?有三种判断条件判断条件1:只能被1和本身整除的称为素数;判断条件2:在区间(1,x/2)中找不到能整除素数x的整数;判断条件3:在区间(1,sq原创 2020-06-17 21:19:19 · 367 阅读 · 0 评论 -
矩阵问题
文章目录1. 转圈打印矩阵1. 转圈打印矩阵给定一个整型矩阵matrix,请按照转圈的方式打印它。示例:1 2 3 45 6 7 82 5 0 19 6 7 4打印结果为:1 2 3 4 8 1 4 7 6 9 2 5 6 7 0 5要求:额外空间复杂度为O(1)解题思路:这道题可以宏观考虑,题目要求转圈打印矩阵,可以取左上角(r1,c1)和右下角(r2,c2)的两个元素为边界开始打印,定义一个指针点(r,c),r从r1开始,原创 2020-06-14 22:02:57 · 1094 阅读 · 0 评论 -
约瑟夫环问题之圆圈中最后剩下的数字
文章目录面试题62. 圆圈中最后剩下的数字1.1 示例1.2 解题思路面试题62. 圆圈中最后剩下的数字0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。1.1 示例示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2原创 2020-06-01 22:20:51 · 482 阅读 · 0 评论 -
二分法相关算法题总结
文章目录面试题53 - I. 在排序数组中查找数字 I(简单)面试题53 - I. 在排序数组中查找数字 I(简单)统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0解题思路:利用二分查找,先找到,最右边等于target的数组元素索引为r,再利用二分查找,找到左边第一个等于target的元素索引为l,最后数原创 2020-05-16 21:38:59 · 1079 阅读 · 1 评论