第一阶段(数据结构和算法)
以极客时间小争哥《数据结构与算法之美》教程为参考,以golang代码为实现语言,修炼内功中。
天天water
不要在该奋斗的年纪,选择安逸。
展开
-
时间和空间复杂度分析
1. 如何分析、统计算法的执行效率和资源消耗前言:数据结构和算法本身解决的是“快”和“省”的问题,所以,执行效率是算法一个非常重要的考量指标。如何衡量编写的算法代码的执行效率,主要内容就是:时间、空间复杂度分析。复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半(仅供参考)。1.1 为什么需要复杂度分析测试结果非常依赖测试环境 测试结果受数据规模...原创 2020-01-19 11:01:53 · 4242 阅读 · 0 评论 -
数据结构学习笔记(0X06)--排序
1.冒泡排序思路:冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。func bubbleSort(arr []int) { if arr == nil { return } flag := false f...原创 2019-12-25 15:18:21 · 4038 阅读 · 0 评论 -
数据结构学习笔记(0X05)--递归
1.递归需要满足的三个条件是什么?2.写好递推代码的关键着手点是什么? 如何避免被一层层的逻辑绕进去?3.写递推代码是如何避免堆栈溢出?4.写递推代码如何避免重复计算?...原创 2019-12-25 15:11:58 · 3986 阅读 · 0 评论 -
数据结构学习笔记(0X04)--队列
总结一、什么是队列?1.先进者先出,这就是典型的“队列”结构。2.支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。3.所以,和栈一样,队列也是一种操作受限的线性表。二、如何实现队列?1.队列APIpublic interface Queue<T> {public void enqueue(T item); //入队pu...原创 2019-12-25 15:10:03 · 3993 阅读 · 0 评论 -
数据结构学习笔记(0X03)--栈
一、什么是栈?1.后进者先出,先进者后出,这就是典型的“栈”结构。2.从栈的操作特性来看,是一种“操作受限”的线性表,只允许在端插入和删除数据。二、为什么需要栈?1.栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现。2.但,任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险。3.所以,当某个数据集合只涉及在...原创 2019-10-24 22:47:59 · 4064 阅读 · 0 评论 -
数据结构学习笔记(0X02)--链表
概念:1.通过“指针”将一组零散的内存块串联起来使用。2.插入、删除数据非常快速。链表基本概念:链表不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。最常见的三种链表结构:单链表、双向链表、循环链表。需要掌握的5个常见的链表操作:单链表反转; 链表中的环检测; 两个有序链表的合并; 删除链表倒数第n个结点; 求链表的中间结点;代码实战1....原创 2019-10-08 16:40:29 · 4001 阅读 · 0 评论 -
数据结构学习笔记(0X01)--数组
一、前言:为什么大部分编程语言的数组都是从0开始编码?从数组存储的内存模型上来看,“下标”确切的说法就是一种“偏移”,相比从1开始编号,从0开始编号会少一次减法运算,数组作为非常基础的数组结构,通过下标随机访问元素又是非常基础的操作,效率的优化就要尽可能的做到极致。数组下标从0开始计数,a[k]的内存地址公式为:a[k]_address = base_address + k * type_...原创 2019-07-08 18:08:47 · 4289 阅读 · 0 评论 -
数据结构学习笔记(0X07)--二分查找
二分查找思路:二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。go代码实现:最简单版:func bsearch(nums []int, findNum int) int{ low := 0 hight := len(nums) - 1 for low &...原创 2020-01-01 23:22:51 · 4031 阅读 · 0 评论