Contents
0x00-前言
本文参考对象:
- LeetBook-数组和字符串及其评论区
- 百度及秒懂百科
还有,作者更新慢。。。
0x01-概述
数组是数据结构中的基本模块之一。因为字符串是由字符数组形成的,所以二者是相似的。大多数面试问题都属于这个范畴。
0x02-学习重点
- 字符串的KMP算法
- 使用双指针解决实际问题
- 字符串的不同特性
0x10-数组简介
0x11-集合、列表与数组
感谢LeetCode中qihao做的笔记。
0x12-数组之操作
- 读取(某一)元素,时间复杂度为 O(1) 。
- 查找(一特定)元素,设对数组
a[n]进行操作,则(最坏)时间复杂度为 O(n) 。 - 插入元素:末尾插入会较为简便。如果要从中间位置频繁插入,就容易浪费时间:最好运用链表进行此操作。
- 删除元素:
当我们删除掉数组中的某个元素后,数组中会留下空缺的位置,而数组中的元素在内存中是连续的,这就使得后面的元素需对该位置进行填补操作。
此操作的(最坏)时间复杂度同样为 O(n) 。
0x13-二维数组的特殊之处
如下图,我们可以认为,二维数组的每一个元素都是一维数组。
所以,二维数组在本质上仍然是一个一维数组,只不过我们常常将它当做矩阵。
在计算机的内存中,二维数组是这样的:
借助指针,我们可以在二维数组中实现一些有趣操作。
对上图还有一个注意事项:
实际数组中的元素由于类型的不同会占用不同的字节数,因此每个方格地址之间的差值可能不为 1。
0x20-字符串
0x21-简介
维基百科对字符串的解释是这样的:
字符串是由零个或多个字符组成的有限序列。一般记为 s = a1a2…an。它是编程语言中表示文本的数据类型。
在实际题目中,字符串的基本操作对象通常是字符串整体或者其子串。
何为子串?"I enjoy coding"的子串为"I"<




891

被折叠的 条评论
为什么被折叠?



