ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

数据结构与算法基础认识

2021-12-11 17:33:13  阅读:123  来源: 互联网

标签:二叉 认识 复杂度 next 链表 算法 例子 搜索 数据结构


此博客只用于个人复习用

先上大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
}

  

标签:二叉,认识,复杂度,next,链表,算法,例子,搜索,数据结构
来源: https://www.cnblogs.com/gengzhen/p/15588818.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有