zoukankan      html  css  js  c++  java
  • 数据结构与算法基础认识

    此博客只用于个人复习用

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

      

  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/gengzhen/p/15588818.html
Copyright © 2011-2022 走看看