算法
Joker_0312
在求知中不断成长
展开
-
算法系列--排序算法(三)选择排序
定义 选择排序:顾名思义就是选择其中一个符合条件的元素直接放到排列完成时候的位置。每次选出当前集合中的一个最值。 特点被选中的元素经过一轮比较会直接找到自己的位置。“选择排序” 和 “冒泡排序” 都比较适合“前5名”“后5名”...这种问题。图解 (1)、选择数组中最小的元素值以及位置,默认第一位的【3】是最小值;3 1 4 ...原创 2018-08-09 17:01:12 · 358 阅读 · 0 评论 -
算法系列--LeetCode(三)矩阵求岛屿数量
一个N*M的矩阵只有0、1两种元素,1为陆地0为海洋。相邻(上下左右四个方向)即为同一块陆地,输出矩阵中岛屿数量。算法的“广度优先”还是“深度优先”: 1.广度:一行一行遍历记录岛屿状态以及岛屿产生与合并情况。 2.深度:从一个节点开始四个方向去寻找连接岛屿,并标记寻找过的位置。这里采用的是深度优先递归实现,非递归实现需要借助栈。代码: /** * 二维矩阵...原创 2018-08-24 17:56:43 · 1441 阅读 · 0 评论 -
算法系列--LeetCode(二)求第K大
在一个n长度的数组中,找到第K大个数字。思考: 1.维护一个K长度的数组保持有序,K是常量,时间复杂度O(n);如果K跟n有关,时间复杂度O(n^2)。 2.K未知采用快排序做二分查找,快排序是一个比较稳定的排序,JDK很多排序都是用快排序。 3.可以看一下Arrays 里面的排序,大数组用计数排序,小量用快排序;因为我们不是全排序,最后选择用快...原创 2018-08-24 16:36:02 · 503 阅读 · 0 评论 -
算法系列--LeetCode(一)编辑校读并集
此系列为算法刷题,大部分题目来自LeetCode也有本人平时遇见有意识的算法题,在此记录一下个人解决方案。希望能跟大家交流,如果在此基础上有优化或者有更好的方案,请给我留言,不胜感激。n个编辑在校对同一篇文章,每个编辑会根据自己认为的有语法问题的段落作出标记;请合并所有校对给出的错误区间。e.g.A:[4,8],[9,12],[1,2]B:[13,19],[200,220]C:[15...原创 2018-08-24 16:04:40 · 307 阅读 · 0 评论 -
算法系列--排序算法(四)快速排序
快速排序是通过两个指针相互交换完成一次快速排序,类似于递归的二分排序,从交换上来讲比较像冒泡(为什么这么说呢?不管是插入还是直接,都需要在移动之前遍历元素;冒泡直接比较交换。)上面的可能有点抽象,我是不太想抄一个百度定义去解释,可能对算法理解上不太好。通过两个指针:一个标记用来比较二分的对象,一个标记标记下一个要进行二分标记的数字;一次快速排序中包含多个二分过程。图解(升序):数据...原创 2018-08-20 15:23:06 · 237 阅读 · 0 评论 -
算法系列--排序算法(六)堆排序
找到一个堆排序讲的比较好的博客,自认为画图没有人家好所以摘抄下来分享给大家。堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏、最好、平均时间复杂度均为O(nlogn);空间复杂度O(1),它也是不稳定排序。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大根堆;或者每个结点的值都小于或等于其左右孩子结点的值...原创 2018-08-24 15:20:35 · 278 阅读 · 0 评论 -
算法系列--LeetCode(四)10进制转2进制
将一个10进制的数据转化为2进制的字符输出。进制转换: 1.互为倍数(2进制 -> 8进制 -> 16进制):一位拆成几位或者几位合成一位,注意是从低位到高位分组。 2. 10进制转其他进制:取模,计数,相除;把最后计数转置即为结果。举例: /** * 10进制转2进制 */ @Test publi...原创 2018-08-26 16:40:03 · 1676 阅读 · 0 评论 -
算法系列--排序算法(五)归并排序
不积跬步无以至千里... ...归并排序有点像希尔排序(分组排序最后合并,如何分组?如何合并两个分组?是两者的区别。),其实也是分治实现的一种。归并排序:采用二分法将集合分成最小单位保证组内有序,然后合并两个分组;每次分组之后都跟着一次合并排序直到整个集合。图解:(1)分组:第一次分组3 1 4 7 2 5 8 6 1 1 ...原创 2018-08-22 13:02:16 · 262 阅读 · 0 评论 -
算法系列--排序算法(二)冒泡排序
前言: 上一篇说的是“插入排序”,这篇讲讲“冒泡”,算法比较简单篇幅会比较短;既然要做一个系列再短也要讲啊~!概念(百度上抄的): 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对...原创 2018-08-08 15:59:33 · 260 阅读 · 0 评论 -
算法系列--排序算法(一)插入排序
前言 准备开始写一个算法系列,记录一下自己学习的过程,参考前人的总结的基础上分享一下自己的理解。欢迎大家私下交换意见。插入排序的特点保持排序过的集合是有序的,下一个需要排序的元素作为一个节点插入已经有序的集合中。直接插入排序图解:5 2 1 4 8 7 3 6 第一步:2 插入,认为左边的{5}是一个有序集合。2 ...原创 2018-08-07 14:33:12 · 253 阅读 · 0 评论 -
LeetCode 计算积水体积
/** * CalculateWater 计算存水面积 * * 等宽柱体排列计算,柱体之间积水体积,如下图; * * @Date 2019/6/27 * @Author joker **/public class CalculateWater { /** * 计算 - 优化:左右最高的查询可以依靠上一次查询,判断是否一致;判断其中一个比当前小就快速失败;超...原创 2019-06-27 01:22:46 · 547 阅读 · 0 评论