代码随想录 | Day8 | 数组总结篇

数组理论基础

数组是存放在连续内存空间上相同类型数据的集合。

  • 数组下标都是从0开始的
  • 数组内存空间的地址是连续的;
  • 数组的元素是不能删的,只能覆盖。

数组的经典题目

二分法

坚持循环不变量原则,只有在循环中坚持对区间的定义,才能清楚的把握循环中的各种细节。

条件:有序数组且无重复元素

双指针法

双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新新数组下标的位置

滑动窗口

根据当前子序列和大小的情况,不断调节子序列的起始位置。

螺旋矩阵

循环不变量,找好边界。

前缀和

思考

看了上述总结,感觉最小覆盖子串、有序数组的平方一点印象都没有= =,希望灿灿老师可以讲解讲解

✪ ω ✪

链表

1、概念:

链表是一种通过指针串联在一起的线性结构,每一个节点由数据域和指针域组成,指针域用于存放指向下一个节点的指针,最后一个节点指针域指向null(空指针),链表入口节点称为链表的头结点(head)。

2、类型

  • 单链表(如上图)
  • 双链表(每个节点具有两个指针域,一个指向上一个一个指向下一个节点,既可向前查询也可向后查询)。
    • 循环链表(首尾相连,可用于解决约瑟夫环问题)。

    3、链表的存储方式

    1. 数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。
    2. 链表是通过指针域的指针链接在内存中各个节点。

    散乱分布在内存中的某地址中,分配机制取决于操作系统的内存管理。

    4、链表的定义(WoW)

    // 单链表
    struct ListNode {
        int val;  // 节点上存储的元素
        ListNode *next;  // 指向下一个节点的指针
        ListNode(int x) : val(x), next(NULL) {}  // 节点的构造函数
    };

    5、链表的操作

    1. 删除节点

    删除D节点,如图所示,只要将C节点的next指针 指向E节点就可以了,c++中要动手释放D节点内存空间。

    链表-删除节点

    2. 添加节点

    如图所示,可以看出链表的增添和删除都是O(1)操作,也不会影响到其他节点。但是要注意,要是删除第五个节点,需要从头节点查找到第四个节点通过next指针进行删除操作。

    链表-添加节点

    6、性能分析

    • 数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。
    • 链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。

    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇