摘要: 一、如何分析一个“排序算法” 从三个维度进行评价和分析: 1. 排序算法的执行效率 a. 最好情况、最坏情况、平均情况时间复杂度 b. 时间复杂度的系统、常数、低阶 c. 比较次数和交换(或移动)次数 2. 排序算法的内存消耗 用空间复杂度来衡量。 原地排序算法,特指空间复杂度是O(1)的排序算法。 阅读全文
posted @ 2020-06-19 11:22 大杂草 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 一、如何理解“递归” 递归是一种应用非常广泛的算法(或者编程技巧)。 二、递归的三个条件 1、一个问题的解可以分解为几个子问题的解 2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 3、存在递归终止条件 三、如何编写递归代码 写递归代码最关键的是找到如何将大问题分解为小问题的规律, 阅读全文
posted @ 2020-06-17 17:52 大杂草 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 一、概念 队列:先进者先出。与栈一样,也是一种受限的线性表,同样有两个基本操作:入队和出队。 二、队列实现 队列有两种实现方式:顺序队列和链式队列。 顺序队列 用数组实现的队列叫作顺序队列。 需要两个指针:head指针和tail指针,分别指向队头和队尾。 随着入队和出队操作,head和tail会移到 阅读全文
posted @ 2020-06-17 17:08 大杂草 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 一、概念 栈:后进先出,先进后出的数据结构。栈是一种“操作受限‘的线性表,只允许在一端插入和删除数据。 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。 二、如何实现“栈” 既可用数组(顺序栈),也可用链表(链式栈) 数组实现: // 基 阅读全文
posted @ 2020-06-16 22:44 大杂草 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 一、概念 链表:通过“指针”将一组零散的内存块串联起来使用。 数组vs链表 二、常见链表 三种常见的链表:单链表、双向链表、循环链表。 单链表: 时间复杂度: 插入和删除:O(1) 随机访问:O(n) 循环链表: 一种特殊的单链表,跟单链表唯一的区别在尾结点:单链表尾结点是Null、循环链表尾结点指 阅读全文
posted @ 2020-06-16 18:12 大杂草 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 一、概念 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 关键词: 1. 线性表(Linear List),线性表就是数据排成像一条线一样的结构。 相对的是,非线性表 2. 连续的内存空间和相同类型的数据。 有这两个限制,有一个特性:“随机访问”。通过 阅读全文
posted @ 2020-06-16 17:58 大杂草 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 大O复杂度表示法 大O复杂度表示法,表示代码执行时间随数据规模增长的变化趋势,也叫作渐进时间复杂度,简称时间复杂度。 时间复杂度分析 1. 只关注循环执行次数最多的一段代码 T(n)=O(2+n+1)=O(n) 2. 加法法则:总复杂度等于量级最大的那段代码的复杂度 如果T1(n)=O(f(n)), 阅读全文
posted @ 2020-06-16 15:44 大杂草 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 20个最常用的、最基础的数据结构与算法。 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树; 算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。 事半功倍的学习技巧: 1. 边学边红,适度刷题。 每周花1-2小时,集中把这周三 阅读全文
posted @ 2020-06-16 15:32 大杂草 阅读(197) 评论(0) 推荐(1) 编辑
摘要: SameSite,防止CSRF攻击 阅读全文
posted @ 2020-01-03 11:09 大杂草 阅读(1667) 评论(0) 推荐(0) 编辑
摘要: 认识观察者模式 我们用报纸和杂志的订阅为例来介绍: 报社的业务就是出版报纸。 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。 当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来。 只要报社还在运营,就会一直有人(或单位)向他们订阅报纸或取消订 阅读全文
posted @ 2019-03-25 14:05 大杂草 阅读(223) 评论(0) 推荐(0) 编辑