数据结构与算法至关重要。
计算机是一个内存有限,计算能力有限的机器,如果每段时间处理的数据增加量大于每段时间能处理的数据量,时间越长,电脑执行会越来越慢直至死机。
复杂度:
复杂度是衡量程序运行的效率的量度因素。执行代码消耗计算时间和计算空间,衡量的是时间复杂度和空间复杂度。
复杂度是一个关于输入量n的函数。假如代码的复杂度f(n)。O(n)表示的是复杂度与计算实例的个数n线性相关;O(logn)表示的是复杂度与计算实例的个数n对数相关。
- 复杂度与具体的常数无关{ O(n)与O(3n)是同样的复杂度 }
- 多项式级的复杂度相加时,选择高位作为结果
- O(1)表示一个特殊复杂度,与输入量n无关
对同一个问题,采用不同的编码方式,对空间和时间的消耗可能是不一样的。
例1:要把一串数组倒装
方法一:用两个数组,使用两个for循环,先给另一个数组初始化(数组2复制数组1)再赋值(倒装),代码的时间复杂度是O(n)+O(n)也就是O(n)
方法二:定义一个变量,通过一个for循环,从0遍历到数组1的一半,交换首尾对应的元素,最后再输出数组1。执行次数是数组长度的一般,时间复杂度是O(n/2),也就是O(n)。
虽然时间复杂度一样,但明显第二个方法更快点。
例2:找出数组中出现次数最多的数字
采用双层循环,第一层循环对数组中的每个元素遍历,第二层循环,对于每个元素计算出现的次数,