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


    此博客只用于个人复习用

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

      

  • 相关阅读:
    iOS OC语言: Block底层实现原理 (转载)
    Objective-C中的Block(闭包) (轉載)
    http://oncenote.com/2015/09/16/Security-2-HTTPS2/ (轉載)
    iOS安全系列之一:HTTPS (轉載)
    Swif基本语法以及与OC比较三
    OC/Swift第三方添加出错解决方法
    Swift基本语法及与OC比较之二
    2015AppStore 上传步骤及常见问题
    使用AJAX日历控件,显示某些日期(CalendarExtender)
    在CheckBox中,仅仅允许选择一项
  • 原文地址:https://www.cnblogs.com/gengzhen/p/15588818.html
Copyright © 2020-2023  润新知