现在位置: 首页 > 算法 > 文章
2020年02月07日 算法 ⁄ 共 11471字 评论关闭
  当 Java SE 8(又名核心 Java 8)在 2014 年被推出时,它引入了一些更改,从根本上影响了用它进行的编程。这些更改中有两个紧密相连的部分:流 API 和函数式编程构造。本文使用代码示例,从基础到高级特性,介绍每个部分并说明它们之间的相互作用。   基础特性   流 API 是在数据序列中迭代元素的简洁而高级的方法。包 java.util.stream 和 java.util.function 包含了用于流 API 和相关函数式编程构造的新库。当然,代码...
阅读全文
2020年02月06日 算法 ⁄ 共 1610字 评论关闭
  与栈一样,队列(Queue)也是一种数据结构,它包含一系列元素。但是,队列访问元素的顺序不是后进先出(LIFO),而是先进先出(FIFO)。队列中元素的处理就像是站在商店收款台前排队等待的顾客:排在最前面的顾客最先结账。   队列数据结构常用于计算机操作系统。它们在多用户/多任务环境中尤为重要,在这种环境中,多个用户或任务可能同时请求同一资源。例如,打印由队列控制,因为一次只能打印一个文档。队列用于保存由系统用...
阅读全文
2020年02月06日 算法 ⁄ 共 2521字 评论关闭
  所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。   为了更形象的认识序列,可以将它看做是一家旅店,那么店中的每个房间就如同序列存储数据的一个个内存空间,每个房间所特有的房间号就相当于索引值。也就是说,通过房间号(索引)我们可以找到这家旅店(序列)中的每个房间(内存空间)。   在 Python 中,序列类型包括字符串、列表、元组、集合和...
阅读全文
2020年02月06日 算法 ⁄ 共 1288字 评论关闭
  介绍了很多排序算法,插入排序、选择排序、归并排序等等,这些算法都属于内部排序算法,即排序的整个过程只是在内存中完成。而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘),这时就需要用到本章介绍的外部排序算法来解决。   外部排序算法由两个阶段构成:   按照内存大小,将大文件分成若干长度为 l 的子文件(l 应小于内存的可使用容量),...
阅读全文
2020年02月06日 算法 ⁄ 共 2289字 评论关闭
  关于字符串匹配算法有很多,之前我有讲过一篇 KMP 匹配算法:图解字符串匹配 KMP 算法,不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多。至于选择哪一种字符串匹配算法,在不同的场景有不同的选择。   采用的就是 Boyer-Moore 匹配算法了,简称BM算法。这个算法也是有一定的难度,不过今天,我选用一个例子,带大家读懂这个字符串匹配 BM 算法,看完这篇文章,保证你能够掌握这个算法...
阅读全文
2020年02月06日 算法 ⁄ 共 9107字 评论关闭
  十大排序算法可以说是每个程序员都必须得掌握的了,花了一天的时间把代码实现且整理了一下,为了方便大家学习,我把它整理成一篇文章,每种算法会有简单的算法思想描述,为了方便大家理解,我还找来了动图演示;这还不够,我还附上了对应的优质文章,看完不懂你来砍我,如果不想砍我就给我来个好看。   术语铺垫   有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:   1、稳...
阅读全文
2020年02月06日 算法 ⁄ 共 1549字 评论关闭
  红黑树算是很难的一种数据结构吧,一般很少考察插入、删除等具体操作步骤,如果遇到要你手写红黑树的面试官,就直接告辞吧。所以,更多是会考察你对红黑树的理解程度,考察的最多的估计就是为什么有了二查找查找树/平衡树还需要红黑树这个问题了,今天,你只需要花一分钟的时间,就知道怎么回答这个问题了。   1、二叉查找树的缺点   二叉查找树,相信大家都接触过,二叉查找树的特点就是左子树的节点值比父亲节点小,...
阅读全文
2020年02月06日 算法 ⁄ 共 2142字 评论关闭
  排序算法相必大家都见过很多种,例如快速排序、归并排序、冒泡排序等等。今天,我们就来简单讲讲堆排序。今天的堆排序算法主要就是依赖于二叉堆来完成的。   用辅助数组来实现堆排序算法   假如给你一个二叉堆,根据二叉堆的特性,你会怎么使用二叉堆来实现堆排序呢?   我们都知道,二叉堆有一个很特殊的节点 —- 堆顶,堆顶要嘛是所有节点的最大元素,要嘛是最小元素,这主要取决于这个二叉堆是最小堆还是最大堆。  ...
阅读全文
2020年02月06日 算法 ⁄ 共 1386字 评论关闭
  在 shopee 的一面中,问了我一道最小栈的问题,关于最小栈的问题,我以前是做过的,以为是送分题,最结果最优解没写出来,不过也脑补了一些优化,算是答的还行。下面我先大致描述下这道题,然后一步步给出最优解以及我在面试中是解法(面试中给出了几个优化,但想不出最优解)。题目如下:   实现一个这样的栈,这个栈除了可以进行普通的push、pop操作以外,还可以进行getMin的操作,getMin方法被调用后,会返回当前栈的最...
阅读全文
2020年02月06日 算法 ⁄ 共 3269字 评论关闭
  可以通过可达性算法来识别哪些数据是垃圾,那该怎么对这些垃圾进行回收呢。主要有以下几种方式方式:标记清除算法,复制算法,标记整理法。   标记清除算法   步骤很简单:   先根据可达性算法标记出相应的可回收对象(图中黄色部分)   对可回收的对象进行回收操作起来确实很简单,也不用做移动数据的操作,那有啥问题呢?仔细看上图,没错,内存碎片!假如我们想在上图中的堆中分配一块需要连续内存占用 4M 或 5M 的...
阅读全文