Creeper
Creeper
### 10. iOS input 的 placeholder 不垂直居中 参考 可以通过使用padding,或者 `line-height: 1px` 来 hack。 ```css input { height: 40px; line-height: 1px; } ```
### 11. 微信或系统字体放大缩小,页面布局错乱问题 目前一个比较主流的响应式布局方案就是使用 rem,在微信中查看页面时发现布局错乱。查找原因时发现 html 的 font-size 实际值比设置的值要大,最后定位到是微信设置中放大了字体。 解决方法: ```css html { -webkit-text-size-adjust: 100% !important; text-size-adjust: 100%!important; } ```
### 12. 安卓中`broder-radius: 50%` 非完美圆(正圆)的问题 问题依然与使用 rem 有关,使用 rem 后某些尺寸下必然产生元素实际宽高的小数点问题,不同浏览器对小于1px的处理方式不同(四舍五入或直接丢弃等等),这就造成无法正圆。 解决方案,采用 transform 缩放来避免/减轻非正圆的情况: ```css .circle { width: 2rem; // 放大10倍 height: 2rem; border-radius: 50%; transform scale(.1); // 再缩小回来 transform-origin: center;...
### 13. 输入框``使用伪元素无效 结论:replaced element 不支持伪元素。 像 img/input 这些替换元素,本身就不支持伪元素。参考: - -
### 14. `` 随文字输入自动适应高度 原理是根据 scrollHeight 来设置 height;缺点是删除文字后不太好处理高度自动缩减的问题。
## 排序(sort) 所谓排序,就是使一组记录按关键字递增(或递减)次序排列起来。 排序按策略可以分为五类: 1. 插入排序(Insertion Sort):每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。包括直接插入排序和希尔排序。 2. 选择排序(Selection Sort):每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的序列的最后,直到全部记录排序完毕。有直接选择排序和堆排序。 3. 交换排序:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。有冒泡排序和快速排序。 4. 归并排序(Merge Sort):利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。 5. 分配排序:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O(n)。 ### 冒泡排序 冒泡排序是一种简单排序算法。它重复访问数组(最多n-1趟),每次比较相邻两个元素,顺序错误则交换,如果某趟没有任何交换,则证明数组已经有序。 **冒泡排序时间复杂度:`o(n^2)`。** 最好情况下,数组已经有序,只需要遍历一遍,`o(n)`;最坏情况下,需要`o(n^2)`。冒泡排序是 **稳定** 的。 ``` js function bubbleSort(array) { var...
### 快速排序 快速排序是 C.R.A.Hoare 于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 快速排序的步骤分为三步: 1. 在数据集之中,选择一个元素作为 基准(pivot)。 2. 所有小于 基准 的元素,都移到 基准 的左边;所有大于 基准 的元素,都移到 基准 的右边。这个操作称为分区 (partition) 操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。 3. 对 基准 左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 **快速排序时间复杂度是 O(nlgn)。** 快速排序是 **不稳定** 的。...
### 3. 数据结构 首先补一些概念: 1. 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 **Data_Structure=(D,R)**,其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。 数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成成分,数据的**逻辑结构**,数据的**存储结构**和数据**运算结构**。 2. 数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,与存储位置无关。 逻辑结构包括: - **集合**,数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系 - **线性结构**,数据结构中的元素存在一对一的相互关系 - **树形结构**,数据结构中的元素存在一对多的相互关系 - **图形结构**,数据结构中的元素存在多对多的相互关系 3. 数据的物理结构:指数据的逻辑结构在计算机存储空间的存放形式。 数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有**顺序、链接、索引、散列**等多种,所以,一种数据结构可表示成一种或多种存储结构。 数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与个数据项对应的子位串称为数据域(data field)。因此,节点是数据元素的机内表示(或机内映像)。 关系的机内表示(映像方法):数据元素之间的关系的机内表示可以分为顺序映像和非顺序映像,常用两种存储结构:**顺序存储结构和链式存储结构**。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。 #### 3.1 栈...
链表是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 #### 3.3 链表 ##### 3.3.1 单向链表 链表的最简单形式是单向链表,它的每个节点包含2部分:数据+指向下一节点的指针。最后一个节点指向NULL。 _JavaScript实现_ ``` js class Node { constructor(element) { this.element = element this.next = null } } class LinkedList { constructor() {...
##### 3.3.2 双向链表 双向链表相比单项链表,每个节点多一个指针指向前一节点。 _JavaScript实现_ ``` js class Node { constructor(element) { this.element = element this.previous = null this.next = null } } class DoublyLinkedList { constructor() { this.head =...