算法的时间复杂度与空间复杂度

算法学习

  • 刷题的网站,leetcode
  • 刷题的顺序 推荐按类型来刷题,比如数组,链表,二叉树,动态规划,贪心算法,回溯算法,分治算法,排序,搜索,位运算,字符串,哈希
  • 重点关注,动态规划,贪心算法,回溯算法,分治算法,排序,搜索,位运算,字符串,哈希
  • 算法是解决一类问题的套路,数据结构是组织数据的结构,时间、空间复杂度

数据结构

  • 计算机存储,组织数据的方式,比如锅碗瓢盆
  • 算法 一系列解决问题的清晰的指令
  • 程序 = 算法 + 数据结构
  • 数据结构为算法服务的,算法围绕数据结构进行操作

分类

  • 线性结构 数组,链表,栈,队列
  • 非线性结构 树,图,堆,字典,集合

时间复杂度

  • 算法执行的时间,时间复杂度,用大 O 表示法,O(n),O(n2),O(n3)

在这里插入图片描述

O(1)
不变的量,比如常数,时间复杂度为 1

let i =0
i+=

O(n)
随着 n 的增大,时间复杂度会增大

for (let i = 0; i < n; i++) {
  console.log(i)
}

O(n^2)
随着 n 的增大,时间复杂度会增大平方

for (let i = 0; i < n; i++) {
  for (let j = 0; j < n; j++) {
    consloe.log(i, j)
  }
}

O(n^3)
随着 n 的增大,时间复杂度会增大立方

for (let i = 0; i < n; i++) {
  for (let j = 0; j < n; j++) {
    for (let k = 0; k < n; k++) {
      console.log(i, j, k)
    }
  }
}

O(logN)
随着 n 的增大,时间复杂度会增大对数

let i = 0
while (i < n) {
  console.log(i)
  i = i * 2
}

空间复杂度

  • 算法执行时占用的内存空间,空间复杂度,用大 O 表示法,O(1),O(n)

  • 空间复杂度主要关注变量,比如数组,对象,函数,字符串等占用内存的大小

0(1)

let i = 0
i += 1
`

O(n)

let arr = []
for (let i = 0; i < n; i++) {
  arr.push(i)
}

`O(n^2)``

let arr = []
for (let i = 0; i < n; i++) {
  arr.push([])
  for (let j = 0; j < n; j++) {
    arr[i].push(j)
  }
}

后进先出,在栈顶端进行数据的操作

使用场景

  • 十进制转二进制

后进先出,在栈顶端进行数据的操作

使用场景

  • 十进制转二进制

    在这里插入图片描述

  • 括号匹配

    在这里插入图片描述

  • 函数调用栈

    最后调用的函数,是最先执行完的

在这里插入图片描述

  • 浏览器前进后退

实现

//匹配的括号
const isValid = function (str) {
  const stack = []
  if (str.length % 2 !== 0) return false
  for (let i = 0; i < str.length; i++) {
    const char = str[i]
    if (['(', '{', '['].includes(char)) {
      stack.push(char)
    } else {
      const top = stack.pop()
      if (!top) {
        return false
      }

      if (
        (char === ')' && top !== '(') ||
        (char === '}' && top !== '{') ||
        (char === ']' && top !== '[')
      ) {
        return false
      }
    }
  }
  //判断栈是否为空,为空说明匹配
  return !stack.length
}

const t1 = isValid('()')
console.log('🚀 ~ t1:', t1)
const t2 = isValid('()[]{}')
console.log('🚀 ~ t2:', t2)
const t3 = isValid('([)]')
console.log('🚀 ~ t3:', t3)
const t4 = isValid('((()')
console.log('🚀 ~ t4:', t4)
const t5 = isValid('(()')
console.log('🚀 ~ t5:', t5)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值