备赛进度总结第一周
这周的题目还没开始刷,准备先把知识巩固好了之后再去刷刷题目!
时间复杂度和空间复杂度
时间复杂度:算法的执行时间与算法的输入值之间的关系。
常见的时间复杂度:
O(1) O(N) O(N∧2) [俩个循环嵌套] O(log N) O(N log N) [俩个循环嵌套] O(M+N) [俩个循环并列]
对比:
O(1) < O(log N) < O(N) < O(N log N) < O(N∧2) O(2∧N) < O(N!)
空间复杂度:算法的存储空间与输入值之间的关系。
常见的空间复杂度:
O(1) O(N) O(N∧2) [O(log N) O(N log N)](后面俩种不太用得上)
若变量为常量则空间复杂度就是O(1)
递归一般都有O(N)的存储空间
对比:
O(1) < O(N) < O(N∧2)
但在一般的情况下,时间复杂度和空间复杂度只能二选一。有的时候可以用时间复杂度换空间复杂度,有的时候也可以用空间复杂度换时间复杂度。但在我们工作的时候,一般都会选择时间复杂度小为重。
数组Array
数组是指在连续的内存空间中,存储一组相同类型的元素。
元素是指数组中的数。
索引是指元素的相对位置,从0开始。
数组访问(Access)通过索引去访问元素,时间复杂度为O(1)
数组搜索(Search)找元素,时间复杂度为O(N)
数组插入(Insert)插入元素,时间复杂度为O(N)
数组删除(Delete)删除元素,时间复杂度为O(N)
目前重新理解了一下这些东西,发现和之前粗略的了解有一些不同,收货了满满的知识!