• 数据结构与算法基础认识


    此博客只用于个人复习用

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

      

  • 相关阅读:
    WIndows下编译libexif-0.6.21,生成VS下可用的dll和lib
    Android开发之获取系统12/24小时制的时间
    转自 x_x的百度空间
    BZOJ1483: [HNOI2009]梦幻布丁
    BZOJ2124: 等差子序列
    BZOJ2431: [HAOI2009]逆序对数列
    BZOJ1831: [AHOI2008]逆序对
    2821: 作诗(Poetize)
    BZOJ2038小Z的袜子(hose)
    NOI2005维护数列
  • 原文地址:https://www.cnblogs.com/gengzhen/p/15588818.html
Copyright © 2020-2023  润新知