数据结构与算法(b站:爱学习的饲养员)

1. 时间复杂度与空间复杂度

1.1 时间复杂度

  • 执行时间与输入值(问题规模)之间关系
  • 问题规模, 与变量有关
  • 几个常见时间复杂度

O(1)

O(1)

O(logn)

O(logn)

O(n)

O(n)

O(m+n)

O(m+n)

O(nlogn)

O(nlogn)

O(n*n)

O(n*n)

时间复杂度对比

对比

1.2 空间复杂度

  • 存储空间与输入值之间关系
  • 常见的就是O(1)和O(n)
    • 如何分辨O(1)还是O(n)
      1. 输入值是否用作常量
      2. 是否是递归,递归是O(n)

左:O(1) 右:O(n)

在这里插入图片描述

1.3 总结

  • 时间和空间只能二选一, 时间换空间,空间换时间
  • 工作时,一般是考虑时间优先

2.数据结构

2.1 数组Array

  • 连续的内存空间,存储一组相同类型数据

  • 四种方法的时间复杂度

    • 访问 O(1) : 通过索引访问元素
    • 搜索 O(n) : 遍历元素返回索引位置
    • 插入 O(n) : 插入元素位置后所有元素后移, 最坏时间复杂度O(n)
    • 删除 O(n) : 同上
  • 特点 : 读多写少

  • 常见操作:
    (1).创建数组
    数组创建

    (2). 增删改查(通过索引,遍历查找),

方法时间复杂度
arr.add(元素)O(1):arr没满的情况下; O(n):arr满了,重新创建一个新数组,旧的数据都要复制过去
arr.add(索引,元素)O(n)
arr.remove(索引)O(n)
arr.set(索引,元素)O(1)
arr.get(索引)O(1)
arr.contains(元素)O(n): 需要通过循环数组进行查询

(3).遍历数组,数组长度,数组排序(内置)

方法
数组长度1,2,3 : c.length; 4 : arr.size()
遍历数组for循环中:c[i] or arr.get(i)
排序(升序)O(nlogn): Array.sort( c); Collection.sort(arr)
排序(降序)O(nlogn): Array.sort( c(转为Integer类型),Collection.reverseOrder()); Collection.sort(arr,Collection.reverseOrder())
  • 练习题

  • 485 最大连续1的个数

  • 283 移动0

  • 27 移除元素

2.2 链表Linked List

2.3 队列Queue

2.4 栈 Stack

2.5 哈希表HashTable

2.6 集合Set

2.7 树Tree

2.8 堆Heapify

2.9 图Graph

3.算法

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值