自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 资源 (7)
  • 收藏
  • 关注

原创 字符串匹配基础(上)

一、BF算法BF算法中文称作“暴力匹配算法”,也叫“朴素匹配算法”。我们先来了解两个概念主串和模式串。来看下面的例子:比如说,在字符串A(长度为n)中查找字符串B(长度为m),那么字符串A就是主串,字符串B就是模式串。因为我们是在主串中查找模式串,所以n>m。BF算法可以用一句话来概括:我们在主串中,检查起始位置分别是 0、1、2....n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的。如下图所示:从上面的例子和算法思想我们可以知道,在极端情况下,比如主串是

2021-04-22 14:26:06 200

原创

扫码关注公众号,获取更多内容目录一、如何理解图?二、如何存储图1、邻接矩阵存储法2、邻接表存储法三、如何存储诸如微博、微信等社交网络中的好友关系一、如何理解图?树中的元素我们成为节点,图中的元素我们叫做顶点。图中的一个顶点可以与任意其他顶点建立连接关系。我们把这种连接关系叫做边。我来举一个生活中的例子 — 微信。我们可以把每个用户看作一个顶点。如果两个用户是好友,就在两者直接建立一条边。整个微信的好友关系就可以用一张图来表示。其中,每个用户有多少好友,对应到图中,

2021-04-14 16:19:43 212

原创 堆的应用

扫码关注公众号,获取更多内容目录一、优先级队列1、合并有序小文件2、高性能定时器二、利用堆求Top K一、优先级队列1、合并有序小文件场景:有100个小文件,每个文件大小都是100MB,每个文件中存储的都是有序的字符串。我们将泽合100个小文件合并成一个有序的大文件。整体思路与归并排序中的合并函数类似,从这100个文件中,各取第一个字符串,放入数组中,然后比较大小,将最小的那个字符串放入合并后的大文件中,并从数组中删除。假如这个最小的字符串来自于16.txt这个文

2021-04-13 14:15:09 194

原创 如何基于堆实现排序?

扫码关注公众号,获取更多内容目录一、建堆二、排序堆排序的时间复杂度非常稳定,是O(nlogn),并且还是原地排序算法,我们可以把堆排序的过程大致分解为两个步骤:建堆和排序。一、建堆首先将数组原地(不借助另外一个数组,就在原数组上操作)建成一个堆,建堆有两种思路:第一种:借助在堆中插入一个元素的思路,数组中有n个数据,我们可以假设起初堆中只有一个数据(下标为1的数据)。然后我们调用上一节讲的插入操作,将下标为2到n的数据依次插入到堆中。这样就将包含n个数据的数组,组织成了堆。

2021-04-12 13:41:15 242

原创

一、什么是堆堆是一种特殊的二叉树,它满足如下两个条件:1、堆是一个完全二叉树(除了最后一层,其他层的节点个数都是满的,最后一层的子节点都靠左排列)。2、堆中每一个节点的值都必须大于等于(或小于等于)其子树中的每个节点的值。对于每个节点的值都大于等于子树中每个节点的值的堆,叫做“大顶堆”。对于每个节点的值都小于等于子树中每个节点的值的堆,叫做“小顶堆”。我们来分析一下下图,看看这几个二叉树是不是堆?是什么堆?第1个和第2个是大顶堆,第三个是小顶堆,第4个不是堆(堆是完全二叉树,

2021-04-12 10:32:07 1249

原创 二叉树(下)

一、二叉查找树二叉查找树又叫二叉搜索树,它不仅支持快速查找一个数据,还支持快速插入、删除一个数据。二叉查找树要求,在树中的任意一个节点,它左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。其结构如下所示:1、二叉查找树的查找操作查找操作的概括如下:先取根节点,如果它等于我们要查找的数据,那就返回,如果要查找的数据比根节点的值小,那就在左子树中递归查找,如果要查找的数据比根节点的值大,就去右子树中查找。代码实现如下:public class Bin

2021-04-08 16:11:12 186

原创 二叉树(上)

扫码关注公众号,获取更多内容目录一、什么是树?二、二叉树三、二叉树的遍历一、什么是树?我们先看下图的例子,这些“树”都有什么特征?“树”这种数据结构很像真实生活中的“树”,这里面每个元素我们叫做“节点”。比如下面这幅图,A节点叫做B节点的父节点,B节点是A节点的子节点。B,、C、D这三个节点的父节点是同一个节点,它们之间互称为兄弟节点。没有父节点的节点叫做根节点,下图中E就是根节点。没有子节点的节点叫做叶子节点或者叶节点,比如下图中的G、H、I、J、K、L,他们都是叶

2021-03-31 15:10:59 206 1

原创 散列表(下)

扫码关注公众号,获取更多内容目录一、LRU缓存淘汰算法二、Java LinkedHashMap分析一、LRU缓存淘汰算法我们如何实现一个LRU缓存淘汰算法如果单纯用链表实现LRU缓存淘汰算法的话,我们要怎么实现呢?首先我们需要维护一个按照访问时间从大到小有序排序的链表结构,缓存的大小是有限的,当空间不够,需要淘汰一个数据的时候,我们就直接将链表头部的节点删除,当需要缓存某个数据的时候,先在链表中查找这个数据,如果没找到,就将该数据放在链表尾部,如果有,就把该数据移动到链表尾部

2021-03-30 14:16:54 118

原创 散列表(上)

扫码关注公众号,获取更多内容目录一、什么是散列表二、散列函数三、散列冲突1、开放寻址法2、链表法一、什么是散列表散列表的英文叫“Hash Table”,我们平时也叫它“哈希表”或者“Hash 表”,散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。我们举一个例子假如我们有 89 名选手参加学校运动会,每个选手有一个6位数字号牌,如051167,其中,前两位 05 表示年级,中间两位

2021-03-26 17:45:25 149

原创 二分查找(下)

扫码关注公众号,获取更多内容目录一、查找第一个值等于给定值的元素二、查找最后一个值等于给定值的元素三、查找第一个大于等于给定值的元素四、查找最后一个小于等于给定值的元素一、查找第一个值等于给定值的元素// 查找第一个等于给定值const biaryFindFirst = (sortedArr, target) => { if (sortedArr.length === 0) return -1 let low = 0 let high = s

2021-03-22 16:47:49 136

原创 二分查找(上)

扫码关注公众号,获取更多内容目录一、什么是二分查找?二、二分查找的时间复杂度三、二分查找的递归与非递归实现1、非递归实现2、递归实现四、二分查找的局限性一、什么是二分查找?二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。假设有10个订单,订单金额分别是:8,11,19,23,27,33,45,55,67,98。我们怎么找到订单金额是2.

2021-03-22 13:23:51 134

转载 线性排序:桶排序、计数排序

一、桶排序桶排序的核心思想就是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序(插入或快排),桶内的排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。我们用代码来实现:// 思路:// 将数组中的数据,按桶进行划分,将相邻的数据划分在同一个桶中// 每个桶用插入排序算法(或者快速排序)进行排序// 最后整合每个桶中的数据function bucketSort(array, bucketSize = 5) { if (array.leng

2021-03-18 18:33:37 121

原创 排序(下):归并、快速

扫码关注公众号,获取更多内容目录一、归并排序原理及实现二、归并排序性能分析三、快速排序原理及实现四、快速排序性能分析五、归并排序与快速排序的区别一、归并排序原理及实现归并排序使用的是分治思想,将一个大问题分解成小的子问题来解决,其原理我们可以分解为下图,当我们排序一个数组时,先把数组从中间分成前后两部分,然后对这两部分分别排序,再将排好序的这两部分合并在一起,就完成了排序。分治思想和递归思想很像,在实际使用中,分治算法一般都是用递归实现的,分治是一种解决问题.

2021-03-17 14:50:50 134

原创 排序(上):冒泡、插入、选择

一、冒泡排序冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。我们来看下面的例子,了解一下冒泡过程(对一组数据4,5,6,3,2,1从小到大排序)。第一次冒泡的过程通过上图可得知,通过第一次冒泡,6这个元素已经存储在正确的位置上,要想完成多有数的排序,我们只要进行6次这样的冒泡操作就可以了。实际上,刚讲的冒泡过程还可以

2021-03-16 15:26:06 132

原创 递归

扫码关注公众号,获取更多内容目录一、什么是递归?二、递归需要满足的三个条件三、如何编写递归代码?四、递归代码要警惕堆栈溢出五、递归代码要警惕重复计算一、什么是递归?程序调用自身的编程技巧称为递归,光看定义可能不是很理解,我们举一个例子:周末你和女朋友去电影院看电影,女朋友问你现在坐在第几排,电影院里太黑看不清,这时候怎么办?这时候递归就可以派上用场了,你开始问前面一排的人,他是第几排,你只要在他的数字上加1,就知道自己在第几排了,但是前面的人也不知道自己在第.

2021-03-15 15:05:58 142

原创 队列

一、什么是队列?队列是一种操作受限的线性表数据结构,其特点是:先进先出,后进后出。队列支持两个基本操作:入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。二、顺序队列和链式队列队列可以用数组来实现,也可以用链表来实现。用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列。1、数组实现队列// 用数组实现的队列public class ArrayQueue { // 数组:items,数组大小:n privat.

2021-03-14 13:55:43 112

原创

扫码关注公众号,获取更多内容目录一、什么是栈?二、如何实现一个栈?三、支持动态扩容的顺序栈四、栈在函数调用中的应用五、栈在表达式求值中的应用六、栈在括号匹配中的应用七、实现浏览器的前进、后退功能​一、什么是栈?栈是一种“操作受限”的线性表,只允许在一端插入和删除数据,典型的栈结构为:先进后出,后进先出。关于栈,我举一个非常贴切的例子:一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们是从上往下一个一个地依次取,不能从中间.

2021-03-11 18:18:48 137

原创 链表(上)

扫码关注公众号,获取更多内容目录一、底层存储结构二、常见的链表1、单链表2、循环链表3、双向链表4、双向循环链表三、链表与数组性能一、底层存储结构我们观察下图数组需要一块连续的内存空间来存储,对内存的要求比较高。如果我们申请一个 100MB 大小的数组,当内存中没有连续的、足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败。而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用,所以如果我.

2021-03-09 16:56:43 119

原创 数组

扫码关注公众号,获取更多内容目录一、什么是数组?二、数组是如何实现根据下标随机访问的三、为什么数组的“插入”和“删除”是低效的?1、插入操作2、删除操作一、什么是数组?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。我们提取出几个关键词:线性表:线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。而与它相对立的概念是非线性表,比如二.

2021-03-09 14:25:50 262

原创 算法复杂度分析(下)

扫码关注公众号,获取更多内容目录一、最好、最坏情况时间复杂度二、平均情况时间复杂度三、均摊时间复杂度通过算法复杂度分析(上),我们掌握了大部分的算法分析方法,本文将继续讲解四个复杂度分析方面的知识点:最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度、均摊时间复杂度。一、最好、最坏情况时间复杂度我们来分析下面这段代码的时间复杂度function find(array, x) { let pos = -1; for (let i = ...

2021-03-08 14:06:52 119

原创 算法复杂度分析(上)

扫码关注公众号,获取更多内容目录一、为什么需要复杂度分析?二、大O复杂度表示法三、时间复杂度分析1、只看循环执行次数最多的一段代码2、加法法则3、乘法法则四、常见时间复杂度实例1、O(1)2、O(㏒n)、O(n㏒n)3、O(m+n)、O(m*n)五、空间复杂度一、为什么需要复杂度分析?时间、空间复杂度是衡量算法非常重要的考量指标,当我们进行实际运行检测的时候,不同的处理器和数据规模,将会导致算法的性能表现不一致,所以我们需要通过复杂度分析来对.

2021-03-05 18:06:35 124

原创 排序算法 — 冒泡排序

一、定义(来源百度百科)冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。...

2021-03-04 11:11:21 91

原创 ES6(7)— async

关注公众号,获取更多知识目录一、什么是async二、使用1、基本用法2、使用await3、返回值一、什么是asyncasync是Generator的语法糖,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已二、使用1、基本用法async函数返回一个Promise对象,可以使用then方法添加回调函数async function mAsync() { return 'async'}

2021-03-01 17:18:47 241

原创 ES6(6)— Generator函数

一、什么是Generator函数Generator函数可以通过yield关键字,把函数的执行流程挂起,为改变执行流程提供了可能,从而为异步编程提供解决方案。二、Generator函数的组成1、区别于普通函数,一般在function后面,函数名之前有一个 *2、Generator函数内部有yield表达式。function* func(){ console.log("one"); yield '1'; console.log("two"); yield '2'; conso.

2021-03-01 16:20:15 136

原创 ES6(5)— Promise

一、什么是PromisePromise是异步编程的一个解决方案,从语法上来说,Promise是一个对象,从它可以获取异步操作的消息。Promise的特点:1、Promise异步操作有三种状态:pending(进行中),fulfilled(成功),rejected(失败),除了异步操作的结果,任何其他操作都无法改变这个状态。2、Promise对象只有从pending变为fulfilled和pending变为rejected的状态改变。只要处于fulfilled和rejected,状态就不会再改

2021-03-01 13:59:45 78

原创 ES6(4)— Map与Set

一、Map1、Map创建、赋值、获取 let map = new Map(); // key是字符串 map.set('stringKey', '这是和stringKey关联的值'); console.log(map.get('stringKey')) // 输出 这是和stringKey关联的值 // key是对象 let keyObj = {} map.set(keyObj, '这是和keyObj关联的值') console.log(map.get(keyObj)) //

2021-02-24 18:06:11 106

原创 ES6(3)— Symbol

目录一、Symbol是什么?二、基本用法三、使用场景1、作为属性名2、定义常量3、定义某个类的私有属性或方法四、symbol.for()五、Symbol.keyFor()一、Symbol是什么?ES6增加了一种新的数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性。二、基本用法Symbol可以接受一个字符串作为参数,下面的例子表明了Symbol的唯一性(不论参数是否相同,Symbol都是唯一的) let sy1 = Symb.

2021-02-22 14:03:38 118

原创 ES6(2)— 解构赋值

一、什么是解构赋值?解构赋值是对赋值运算符的扩展。是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。二、数组模型的解构(Array)1、基本let [a,b,c] = [1,2,3]console.log({a,b,c}) // 输出{a:1,b:2,c:3}2、可嵌套let [a,[[b],c]] = [1,[[2],3]]console.log({a,b,c}) // 输出{a:1,b:2,c:3}3、可忽略let [a, , b] = [1, 2,

2021-02-19 11:27:08 139

原创 ES6(1)— let与const

ES2015(ES6)新增加了两个重要的javaScript关键字:let与constlet:声明的变量只在let命令所在的代码块内有效。const:声明一个只读常量,一旦声明,常量的值就不能改变注意要点:const其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许变动。对于简单类型(number、string、boolean),值就保存在变量指向的那个内存地址,因此const声明的简单类型变量等同于常量。而复杂类型(object、array、function),变

2021-02-19 10:35:15 97

原创 java.lang.RunntimeException:java.io.EOFEception:End of input at line 1 column 1

错误原因是因为缓存导致的,解决方案是:删除build文件夹重新编译运行即可

2019-01-22 17:33:52 2963 2

转载 OKhttp FormBody和RequestBody的不同

原文地址:https://www.jianshu.com/p/1133389c1f75

2019-01-12 14:29:00 18500 3

转载 拦截器的动态添加请求头,修改及加密

原文地址:https://www.jianshu.com/p/eaee7cd227cd

2019-01-04 11:30:04 4636

转载 okhttp缓存

原文链接:https://blog.csdn.net/fly7632785/article/details/79862973

2019-01-03 16:55:35 263

转载 关于Gson的TypeToken

原文链接:https://www.jianshu.com/p/c820e55d9f27

2019-01-02 11:26:57 609 1

原创 Failed to resolve support-annotations:26.0.2的解决办法

方案一:在app工程的gradle文件下,dependencies{ ****** } 之前添加如下文件 configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:26.+'//DependencyResolveDetails r...

2018-12-25 13:55:31 221

原创 Android APK 反编译

本文主要讲解Android APK 的简单反编译,需要的材料有:一、工具介绍1. dex2jar:将apk反编译成java源码(classes.dex转化成jar文件)。2. jd-gui  :查看APK中的classes.dex转化成的jar文件(源码文件)。二、反编译1.下载dex2jar,下载地址:http://jd.benow.ca2.下载jd-gui,下载地址:https://sourc...

2018-03-23 13:48:14 436

原创 快应用快速上手教程

写在前面:2018年3月20日,各大手机厂商联合推出了快应用标准,现在在各手机商店已经有快应用的存在了,追赶技术潮流,我再此写下了这一篇快应用教程,以记录这一变革。一、开发环境的搭建:快应用官网:https://www.quickapp.cn快应用开发文档:https://doc.quickapp.cnnodejs官方推荐版本:https://nodejs.org/en/blog/release/...

2018-03-22 18:40:03 1628 1

原创 Git的使用(一)

一、安装Git:传送门二、GitHub地址:GitHub传送门三、在Git上新建项目:1.新建项目: 2.填写相关信息,完成创建:    3.创建成功后:           4.拷贝仓库地址,用以本地clone:     四、将远程仓库提取到本地1.进入你希望放置项目的目录,鼠标右键,选择Git Bash Here 或者 在 Terminal 或 cmd 中切换到你希望放置项目的目录中:    ...

2018-03-21 15:03:30 265 1

原创 Android传感器融合

在Android中,我们获取方向有多种方式1.可以使用指南针直接获取(Sensor.TYPE_ORIENTATION),但是此方法现在已经不推荐使用。2.可以根据加速度计和磁场共同抽象出角度,此方法计算的原始数据存在噪声,数据不是特别稳定。3.使用传感器融合技术,使用设备陀螺仪(偏航角)获取设备自身旋转角度,并且与世界地理磁场做出角度补偿,获取欧拉角修正,使用传感器融合技术可以消除噪声,得到稳定的...

2018-03-06 16:10:01 1517 1

原创 腾讯浏览器(X5WebView的使用)

我们在使用Android原生WebView的时候总会遇到各种各样的兼容性问题,比如----遇到<iframe>标签引入的视频链接的时候,发现无法全屏观看,这个时候就需要使用X5WebView了,还可以进行小窗播放。本文Demo地址:http://download.csdn.net/download/eueheuen/10265354GitHub地址:https://github.co...

2018-03-01 17:10:21 13174 3

Android Studio卡顿解决

解决AndroidStudio输入法卡顿问题,将Studio中的这个替换掉,换成本文的,就可以解决这个问题:http://blog.csdn.net/eueheuen/article/details/78800767

2018-03-21

传感器融合论文

本论文介绍了传感器融合的作用,讲解传感器融合相关方式方法,理论依据及实践步骤,解决的问题,Java版本实现项目地址:https://github.com/EUEHBin/SenorMerge

2018-03-05

X5WebViewDemo

介绍有关X5WebView的使用及展示,内部集成了腾讯浏览器X5WebView,与微信,QQ内置浏览器内核相同,解决兼容性问题。

2018-03-01

解析Excel的两种Jar包

jxl和poi的jar包,里面是Android项目,使用了jxl操作excel,具体使用代码请查看:http://blog.csdn.net/eueheuen/article/details/78413285

2018-02-02

列表滑动更多跳转下一页

本资源为列表滑动更多跳转下一页,整体采用列表加载更多的思路,进行事件监听,并且可以自定义动画等,带有阻尼效果

2018-02-01

仿慕课网视频播放

仿慕课网视频播放界面的协调布局,改变AppBarLayout的Flag

2018-01-18

android-beacon-libary的使用

android-beacon-libary的使用android-beacon-libary的使用android-beacon-libary的使用android-beacon-libary的使用android-beacon-libary的使用android-beacon-libary的使用android-beacon-libary的使用android-beacon-libary的使用

2018-01-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除