摘要:ArrayMap和SparseArray,都是采取时间换取空间的方式来提高手机App的运行效率。 1.在数据量小的时候一般认为1000以下,当你的key为int的时候,使用 SparseArray 确实是一个很不错的选择,内存大概能节省30%,相比用HashMap,因为它key值不需要装箱,所以时间
阅读全文
摘要:1. 原则 1. 针对接口编程,而不是针对实现编程。即不将变量声明为某个特定的具体类的实例对象,而是遵从抽象类所定义的接口,如Abstract Factory,Builder,Factory Method,Prototype,Singleton 2. 优先使用对象组合,而不是类继承 –>好处:1.
阅读全文
摘要:KMP是一种在一个字符串中定义另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法的时间复杂度为O(m+n)。 一个极端的例子是:在S="AAAAAA...AAB"(100个A)中查找T="AAAAAAAAAB",简单匹配算法每次都是匹配到T的结尾,发现字符不同,然后T的下标回
阅读全文
摘要:思路:假设前半部分(A[left]到A[mid])与后半部分(A[mid+1]到A[right])都是从小到大排好序的,那么如果A[left]>A[mid+1],则A[mid+1]与前半部分的逆序数目是mid-left+1
阅读全文
摘要:线性模型【例题】在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多...
阅读全文
摘要:十六进制,十进制,二进制的转换,转换结果放在一个string中首先,十进制转到几进制,就是除以几的余数,先得到的放在低位,直至结果为0其次string转成int:Integer.parseInt(s); 也可以通过string得到char,在通过与'0'相减比较得到intint转成string: S...
阅读全文
摘要:逆波兰式:Reverse Polish notation,RPN,,也叫后缀表达式,将运算符写在操作数之后数据结构:两个栈S1和S2。S1临时存储运算符,S2存储最终结果。算法:(1)若取出的字符是操作数,则分析出完整的运算数,该操作数直接送入S2栈(2)若取出的字符是运算符,则将该运算符与S1栈栈...
阅读全文
摘要:线段树是一棵二叉树,记为T(a, b),参数a,b表示区间[a,b],其中b-a称为区间的长度,记为L。数据结构:struct Node{ int left,right; //区间左右值 Node *leftchild; Node *rightchild; };...
阅读全文
摘要:伸展树(Splay Tree),或者叫自适应查找树,插入、查找和删除操作的时间都为O(logn)。伸展树的目的是使被查频率高的那些条目就应当经常处于靠近树根的位置。它的做法是在每次查找后,将被查找的节点splay到根节点。使用伸展树需要符合90-10法则:在实际情况中,90%的访问发生在10%的数据...
阅读全文
摘要:RB树(红黑树)并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。由于它的设计,任何不平衡都会在三次旋转之内解决。典型的用途是实现关联数组(如C++中的map和set) 红黑树满足以下特性: 1)每个结点要么是红的,要么是黑的。 2)根结点是黑的。 3)每个叶结
阅读全文
摘要:AVL树(命名来源于作者姓名,Adelson-Velskii和Landis),即平衡二叉树,满足以下的条件:1)它的左子树和右子树都是AVL树2)左子树和右子树的高度差不能超过1从条件1可能看出是个递归定义。AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树插入节...
阅读全文
摘要:哈希表原理:输入(key, value) -> 通过散列函数生成hashkey -> 将(key,value)放入hashkey对应的bucket 散列函数满足以下的条件:1、对输入值运算,得到一个固定长度的摘要(Hash value);2、不同的输入值可能对应同样的输出值;3、散列函数的输出值尽量
阅读全文
摘要:哈夫曼编码与哈夫曼算法哈弗曼编码的目的是,如何用更短的bit来编码数据。通过变长编码压缩编码长度。我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit。但在很多情况下,数据文件中的字符出现的概率是不均匀的,比如在一篇英语文章中,字母“E”出现的频率最高,“Z”最低,这时我们...
阅读全文
摘要:NP问题(Non-deterministic Polynomial ):多项式复杂程度的非确定性问题,这些问题无法根据公式直接地计算出来。比如,找大质数的问题(有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的);再比如,大的合数分解质因数的问题(有没有一个...
阅读全文
摘要:图的广度优先搜索基本思想和树的层次遍历差不错。与树的层次遍历不同的是,图中可能包含回路,我们遍历完一个节点,继续进行遍历,可能会回到已经遍历过的节点。为了避免遍历一个节点两次,需要开辟一个bool型的数组来标记该节点是否已经遍历过。 #include #include #include ...
阅读全文
摘要:对象箭头表示,邻接矩阵和邻接表稀疏图用邻接表,或对象箭头稠密图用邻接矩阵在无向图中求顶点的度,使用邻接矩阵及邻接表法都很容易做到在有向图中求顶点的度采用邻接矩阵比采用邻接表表示更方便。邻接表求出度容易,求入度较困难,需要遍历所有顶点的边表
阅读全文
摘要:动态规划和贪心算法都是一种递推算法 即均由局部最优解来推导全局最优解 (不从整体最优解出发来考虑,总是做出在当前看来最好的选择。) 不同点: 贪心算法与动态规划的区别:贪心算法中,作出的每步贪心决策都无法改变,由上一步的最优解推导下一步的最优解,所以上一部之前的最优解则不作保留。 能使用贪心法求解的...
阅读全文
摘要:题目要求:输入有12行数据,每一行分别是每个月的余额。计算他们的平均值后输出。在输出时要在前面加上“$”,并在四舍五入后保留小数点后两位。方法1:float a,b;main(){ for(;scanf("%f", &a)+1;) b+=a; printf("$%.2f", b/12);...
阅读全文
摘要:Quick Find:适用于search频繁的情况每个节点有一个id值,id相同表示两个节点相连通。在union时要将等于某一个id值都改成另一个id值Quick Union:适用于union频繁的情况每个节点有一个id值,id值表示该节点连接的那个节点的下标;每个节点有一个root值,root(i...
阅读全文