数据结构与算法基础认识
2021/12/11 17:47:04
本文主要是介绍数据结构与算法基础认识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
此博客只用于个人复习用
先上大O符号所有的复杂度
时间复杂度
时间复杂度为O(1) 的例子:常量或变量的加减乘除
时间复杂度为O(n) 的例子:不嵌套的for while循环
时间复杂度为O(n^2)的例子,循环嵌套两个for
如果一个算法的时间复杂度有O(n)和O(n^2)两种方法,肯定是选时间复杂度更低的一种方法,运行时间更短
时间复杂度为O(logn)和O(nlogn)的例子
logn(二分搜索)
nlogn(排序) :array.sort()
空间复杂度
空间复杂度为O(1)的例子:创建一个变量a为1
空间复杂度为O(n)的例子:
(1)、定义一个长度为n的数组
(2)、定义一个长度为n的set,map
(3)、用for循环生成一个长度为n的链表
空间复杂度为O(n^2)的例子:
二维数组:一维数组每个元素存放一个长度为n的set或map的链表
优化的方法:
链表
单向链表 双向链表 循环链表
双向链表是每个链都有prev和next指向上一个和下一个,注意第一个的prev是null,最后一个的next是null
循环链表是某个链的next指向了前面链的某一个,造成了循环
面试题:链表和数组的区别?
答:链表删除的时候会通过.next去寻找。先找到.next.next ,再删除.next,最后拼接3
如果是数组的话,比如删除了3,后面的位置都要往前跳一位
二叉树,二叉搜索树
二叉树
二叉搜索树(binary search tree)简称BST
什么叫做二叉搜索树:左分支节点一定是小于该节点,右分支节点一定大于该节点
二分搜索
经典二叉搜索(找到target的值的索引)
var search = function (nums,target) { let left = 0,right = nums.length - 1 while(left <= right){ let mid = left + (right - left)/2 if(nums[mid] === target){ return mid }else if(nums[mid] < target){ left = mid + 1 }else { right = mid - 1 } } return -1 }
这篇关于数据结构与算法基础认识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南