算法
文章平均质量分 72
kross_
这个作者很懒,什么都没留下…
展开
-
SparseArray:解析与实现
介绍Android提供了SparseArray,这也是一种KV形式的数据结构,提供了类似于Map的功能。但是实现方法却和HashMap不一样。它与Map相比,可以说是各有千秋。优点占用内存空间小,没有额外的Entry对象没有Auto-Boxing缺点不支持任意类型的Key,只支持数字类型(int,long)数据条数特别多的时候,效率会低于HashMap,因为它是基于二分查找去找...原创 2019-01-17 01:26:33 · 363 阅读 · 0 评论 -
快速排序
思路快速排序将数组A通过原地交换的方法将数组分成两个区域,一个区域的所有元素都小于等于p,另一个区域所有元素都大于等于p。然后再递归的处理这两个区域。如上图所示:1.选取6作为基准,将小于等于6的数都移动到它的左侧,大于等于6的都移动它的右侧。那么6的index就固定了,它不会在变了。2.对左边的子部分,做同样的操作,选取一个数作为基准。同样对右的子部分也做一样的处理。3.重复上面的操...原创 2018-11-25 19:40:25 · 195 阅读 · 0 评论 -
一些常用的算法操作,方法与技巧
找列表的中点可以使用快慢指针,一个指针步进1,另一个指针步进2。可用于数组或者链表。对于数组[1, 2, 3, 4]i1 = 0; // 每次步进1i2 = 0; // 每次步进2// 第一次i1 = 1;i2 = 2;if (i2 >= arr.length - 1) // 检查i2是否到达尾部,或者超过尾部// 第二次i1 = 2;i2 = 4;if (i...原创 2018-11-11 17:22:45 · 802 阅读 · 0 评论 -
插入排序:思路与实现
插入排序的思想插入排序算法是一个比较简单好理解的算法。直接的例子就是玩扑克的时候,想象一下,分牌的时候,大家轮流的从一组牌中抽取最上面的一张,然后将它以某种顺序插入到我们的左手中。比如,我们想要从小到大排列我们的扑克牌。那么第一次,抽到了2,我们的左手还没有任何牌,直接放到左手上。左手:[2]第二次,我们抽到了9,由于已经存在2了,因此,我们将9放在2的右边。左手:[2, 9]第三...原创 2018-11-12 23:46:40 · 832 阅读 · 0 评论 -
堆排序:思路与实现
学习了一下堆排序的思想,分享一下我的理解。首先介绍一些概念。堆(heap),最大堆(max heap),最小堆(min heap)堆是一种特别的树状结构,普通的树结构,没有对子节点也特别的规定,但堆是一颗完全的树,除了最底层,上面的每一层都是满的。如果一个堆中所有的节点,它有用子节点的话,并且这个节点大于它的子节点,那么这个堆就是最大堆。如果一个堆中所有的节点,它有用子节点的话,并且这个...原创 2018-11-09 21:46:08 · 258 阅读 · 0 评论 -
LZW编码的学习与实现
Preface看了一天,感觉终于搞明白了一点(代码终于写对了),编码过程大四的时候学过一点点,按部就班的按照步骤来做就行了,解码过程貌似课堂上老师没讲,自己看wiki上的讲解和example搞懂了。LZW全称Lempel–Ziv–Welch,就是这个三个人搞出来的。LZW的工作思路,考虑一段数据,abcabcabc,对于这样的一段数据,如果不做任何处理和压缩,假设每个字符用一个字节来表原创 2015-10-20 20:21:03 · 24041 阅读 · 22 评论 -
给四条线段,判断是否是矩形
今天又做了一个题目,这个感觉比昨天的复杂一些,代码量都多了一些。题目是这样的,要求输入一系列点坐标,一共输入16个整型,两个两个一对,就是8个坐标,再两个两个一对,就是4条线段,判断这4条线段,是否围成一个矩形。想了下,大概分为如下几个步骤来做: 1. 获取输入,组织数据结构,怎么存储这些点,这些线段。 2. 然后就是怎么判断矩形。怎么判断矩形?我又分为下面几个步骤来考虑: 1. 先判断四条线原创 2015-06-11 20:25:00 · 3529 阅读 · 0 评论 -
Trie树
tags:算法今天在hiro上做了一个题目,要求输入一个字符串,在一个词典中找到以这个字符串开头的字符串有多少个。比如,词典里有abc,ab,adf三个单词,那么以a开头的单词有3个,以ab开头的单词有2个,以ad开头的单词有1个,以abcdefg开头的单词有0个。 就是这样一个规则。题目中还提示了一个Trie树的概念,然后我去学习了Trie树是长啥样的,搞明白了之后就用C++来写这个题目,C++原创 2015-06-09 15:21:42 · 468 阅读 · 0 评论