
算法
Isaac_Gao
这个作者很懒,什么都没留下…
展开
-
【算法笔记】01. 如何正确的学习和练习算
1. 注意:编写多种解法,并比较多种解法优劣。1. 分析多种解法,及其时间和空间复杂度。1. 耗时:5min~15min。2. 不是一定要做困难的题目。1. 觉得困难的,就是不会的。1. 需比较多种解法的优劣;2. 解决了困难,才能进步。2. 查看解法(没有思路的情况下)1. 详细分析和理解题目。2. 目标:优化不同解法的熟练度。2. 目标:熟悉题目以及其解法。1. 反复练习到熟练。2. 选择最优的解法。2. 理解和编写代码。2. 优化算法,进入前50%1. 反复练习同一类题目。2. 发现缺陷,解决缺陷。.原创 2022-08-17 00:38:40 · 256 阅读 · 1 评论 -
详细分析冒泡排序、选择排序、插入排序(最好/最坏/平均时间复杂度(有序度)、稳定性、内存消耗(原地排序))
如何分析排序算法最好、最坏、平均时间复杂度算法的时间复杂度,会随着排序集合的有序性而改变。我们需要分析不同算法在不同数据下的表现 最好时间复杂度:在完全有序的情况下的时间复杂度(满有序度) 最坏时间复杂度:在最坏情况下的时间复杂度(有序度为0) 内存消耗就是排序算法的 空间复杂度 原地排序:原地排序算法,就是特指空间复杂度是 O(1) 的排序算法。算法的稳定性如果待排...原创 2020-04-21 23:51:54 · 13427 阅读 · 2 评论 -
什么是队列(基础概念/顺序队列/链式队列/动态扩容/循环队列)含示例代码
定义如何理解“队列”队列是一个操作受限的线性表 具有先进先出的性质 跟「栈」一样,分为顺序队列和链式队列用数组实现的顺序队列和用链表实现的链式队列主要要关注队满和队空条件 线性队列 > 队满:tail == n | 队空(没有数据):head == tail 链式队列 > 队满:无界 | 队空:head.next = tail 线性队列的数据搬迁:当队满时,...原创 2020-04-20 22:48:41 · 686 阅读 · 0 评论 -
什么是栈/Java中的栈(栈定义/栈的时间复杂度/实现一个栈/栈的动态扩容)含示例代码
入门如何理解“栈”他是一种受限的线性表 分为 顺序栈/链式栈 是一种 后进先出 的数据结构如何实现一个“栈”栈主要包含两个操作,出栈和入栈。 可以使用 链表或数据 存储数据 分类:顺序栈、链式栈支持动态扩容的顺序栈顺序栈可以支持动态扩容 当容量达到上限,进行一次数据迁移即可。 复杂度分析 最好时间复杂度:O(1) 简单的 push 操作。 最...原创 2020-04-20 22:43:31 · 936 阅读 · 0 评论 -
链表基础(链表、数组性能对比、链表翻转、回文子串)
链表的类型链表也是线性表的一种单链表 双向链表 循环链表 双向循环链表链表/数组的性能对比随机取的时间复杂度 数组:通过下标取是 O(1);取指定值是 O(n) 链表:因为链表的内存地址不连续,所以没办法通过下标取;取指定值是 O(n) 插入/删除 数组:涉及到数据迁移,平均时间复杂度是 O(n) 链表:找到指定值的时间复杂度为 O(n),删除的时间复杂...原创 2020-04-17 01:09:06 · 246 阅读 · 0 评论