数据结构与算法
不懂的浪漫
这个作者很懒,什么都没留下…
展开
-
Leetcode 旋转数组的最小数字
Leetcode 旋转数组的最小数字文章目录Leetcode 旋转数组的最小数字题目题解第一种暴力解法,时间复杂度 O(n)第二种二分查找,时间复杂度 O(logn)题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力原创 2020-07-22 16:20:23 · 361 阅读 · 0 评论 -
数据结构与算法|第十六章:二叉树基础
数据结构与算法|第十六章:二叉树基础文章目录数据结构与算法|第十六章:二叉树基础项目环境1.树(Tree)2.二叉树(Binary Tree)2.1 二叉树定义2.2 链式存储法2.3 顺序存储法3.二叉树的遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历4.小结5.参考项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorithm本章模块:tree1.树(Tree)树是由节点和原创 2020-07-21 16:31:12 · 210 阅读 · 0 评论 -
真题训练1-算法思维训练
算法思维训练例题文章目录算法思维训练例题前言例题1:斐波那契数列例题2:判断一个数组中是否存在某个数参考前言第十四章 《通用解题的方法论》 我们讨论了解题的方法论,宏观上可以分为以下 4 个步骤:复杂度分析,估算问题中的复杂度的上限和下限。定位问题,根据问题类型,确定采用何种算法思维。数据操作分析,根据增、删、查和数据顺序关系选择合适的数据结构,利用空间换时间的思想。编码实现。本章,我们用一些算法的面试题进行练习,来训练算法思维。例题1:斐波那契数列斐波那契数列是:0,1,1,2,3原创 2020-07-18 14:51:10 · 727 阅读 · 0 评论 -
数据结构与算法|第十五章:散列表 - 上
数据结构与算法|第十四章:散列表 - 上文章目录数据结构与算法|第十四章:散列表 - 上1.什么是散列表?1.1 散列思想1.2 小结2.散列函数3.散列冲突3.1 开放寻址法3.2 链表法4.Word文档中单词拼写检查功能是如何实现的?5.总结6.参考1.什么是散列表?散列表的英文叫 Hash Table,我们平时也叫它 哈希表 或者 Hash表。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。在 Java 中原创 2020-07-17 16:37:53 · 286 阅读 · 1 评论 -
数据结构与算法|第十四章:通用解题的方法论
数据结构与算法|第十四章:通用解题的方法论前言本章我们主要讨论当遇到一个实际的算法问题,我们应该如何解题,如何定位问题和技术选型。相关内容参考公瑾博士的《重学数据结构与算法》,公瑾老师的讲解通俗易懂,文中的方法也是多年工作的总结,希望本章能给大家提供一个通用解题的方法论。项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorithm本章模块:solutionmethodology1.问原创 2020-07-08 12:14:38 · 507 阅读 · 0 评论 -
数据结构与算法|第十三章:字符串匹配
数据结构与算法|第十三章:字符串匹配文章目录数据结构与算法|第十三章:字符串匹配项目环境1.字符串是什么?1.1 定义1.2 字符串相等1.3 字符串的存储结构2.字符串的基本操作2.1 新增操作2.2 删除操作2.3 查找操作3. 子串查找(字符串匹配)3.1 BF算法3.2 实现代码4.字符串匹配算法题4.1 查找出两个字符串的最大公共字串4.2 反转字符串5.小结6.参考项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data原创 2020-06-23 11:17:47 · 750 阅读 · 1 评论 -
数据结构与算法|第十二章:二分查找的四种变形问题
文章目录数据结构与算法|第十二章:二分查找-变形问题前言1.项目环境2.查找第一个值等于给定值的元素3.查找最后一个值等于给定值的元素4.查找第一个大于等于给定值的元素5.查找最后一个小于等于给定值的元素6.小结7.参考数据结构与算法|第十二章:二分查找-变形问题前言通过上一章的内容,我们发现二分查找的实现代码并不是很难,那是因为我们上一章写的是最简单的情况,即数据为有序集合而且不存在重复的数据;但是二分查找的变形问题很多,要写出没有 bug 的变形二分查找并不容易,今天我们来讨论四种典型的变形问题:原创 2020-06-15 08:36:11 · 476 阅读 · 1 评论 -
数据结构与算法|第十一章:二分查找-上
文章目录数据结构与算法|第十一章:二分查找-上前言1.项目环境2.图解原理3.O(logn) 惊人的查找速度4.代码实现5.递归实现6.二分查找限制多7.小结8.参考数据结构与算法|第十一章:二分查找-上前言每次看到或者听到二分查找,都会想起一个故事,给博主留下了深刻的印象,今天分享给大家,故事源自于吴军博士的《谷歌方法论》。这是一个关于二分查找的游戏,比如游戏者让大家在心目中想一个1-1000的数字,然后你问他问题,对方回答“yes(是)”或者“no(不是)”,你用10次一定能够猜出他心目中想的数原创 2020-06-11 10:36:32 · 983 阅读 · 2 评论 -
数据结构与算法|第十章:排序-下
文章目录数据结构与算法|第十章:排序-下前言1.项目环境2.桶排序(Bucket Sort)2.1 原理图解2.2 代码实现2.3 排序分析3.计数排序(Counting Sort)3.1 原理图解3.2 代码实现3.3 排序分析4.基数排序(Radix Sort)4.1 原理图解4.2 代码实现4.3 排序分析5.小结6.参考数据结构与算法|第十章:排序-下前言本章会讨论三种时间复杂度是 O(n) 的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法原创 2020-06-10 11:59:01 · 404 阅读 · 1 评论 -
数据结构与算法|第九章:排序-中
文章目录数据结构与算法|第八章:排序-中前言1.项目环境2.归并排序(Merge Sort)2.1 原理图解2.2 代码实现2.3 排序分析2.3.1 归并排序是原地排序算法吗?2.3.2 归并排序是稳定排序算法吗?2.3.3 时间复杂度3.快速排序(Quick Sort)3.1 原理图解3.2 代码实现3.2.1 分区方法13.2.2 分区方法23.3 排序分析3.3.1 快速排序是原地排序算法吗?3.3.2 插入排序是稳定排序算法吗?3.3.3 时间复杂度4.小结5.参考数据结构与算法|第八章:排序-原创 2020-06-09 08:45:21 · 291 阅读 · 0 评论 -
数据结构与算法|第七章:递归
文章目录数据结构与算法|第七章:递归前言1.项目环境2.什么是递归3.递归公式4.递归的条件5.N阶楼梯问题6.递归的改写6.1 电影院例子改写6.2 N阶楼梯改写7.小结8.参考数据结构与算法|第七章:递归前言递归是一种编程技巧,在许多数据结构和算法中都用了递归进行实现,如果要学习后面相对比较复杂的数据结构与算法,掌握递归非常重要。1.项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorit原创 2020-06-07 07:12:47 · 349 阅读 · 2 评论 -
数据结构与算法|第八章:排序-上
文章目录数据结构与算法|第八章:排序-上前言1.项目环境2.排序算法时间复杂度对比3.如何分析排序算法3.1 排序算法的执行效率3.2 排序算法的内存消耗3.3 排序算法的稳定性4.冒泡排序(Bubble Sort)4.1 原理图解4.2 代码实现4.3 排序分析4.3.1 冒泡排序是原地排序算法吗?4.3.2 冒泡排序是稳定排序算法吗?4.3.3 时间复杂度5.插入排序(Insertion Sort)5.1 原理图解5.2 代码实现5.3 排序分析5.3.1 插入排序是原地排序算法吗?5.3.2 插入排序原创 2020-06-06 12:29:28 · 330 阅读 · 0 评论 -
数据结构与算法|第六章:队列
文章目录数据结构与算法|第六章:队列1.项目环境2.什么是队列?3.顺序队列4.链式队列5.循环队列6.阻塞队列7.小结8.参考数据结构与算法|第六章:队列1.项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorithm本章模块:chapter052.什么是队列?可以将它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进先出,这就是典型的 队列。队列跟栈非常相似,支持原创 2020-06-03 15:09:53 · 257 阅读 · 0 评论 -
数据结构与算法|第四章:链表
文章目录数据结构与算法|第四章:链表1.项目环境2.数组 VS 链表3.单链表3.1 插入节点3.2 删除节点4.循环链表5.双向链表6.数组链表性能对比7.如何使用链表实现 LRU 缓存淘汰算法?8.LeetCode 题目9.小结10.参考数据结构与算法|第四章:链表1.项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorithm本章模块:chapter032.数组 VS 链表数组原创 2020-06-02 10:05:22 · 335 阅读 · 0 评论 -
数据结构与算法|第五章:栈
文章目录数据结构与算法|第五章:栈1.项目环境2.栈是什么?3.使用数组实现栈3.1 代码实现3.1 复杂度4.JVM 虚拟机栈5.LeetCode 相关题目6.浏览器前进后退功能7.小结8.参考数据结构与算法|第五章:栈1.项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorithm本章模块:chapter042.栈是什么?一种受限制的线性表,只允许在表的一端进行删除(出栈)和插入原创 2020-06-02 09:16:02 · 461 阅读 · 0 评论 -
数据结构与算法|第三章:数组
文章目录数据结构与算法|第三章:数组1.项目环境2.什么是数组?2.1 线性表(Linear List)2.2 连续内存空间&相同类型2.3 数组数据访问3.低效插入&删除3.1 插入3.2 删除4.集合容器和数组如何选择?5.为什么数组的下标从 0 开始6.小结7.参考数据结构与算法|第三章:数组1.项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorithm本章模块:cha原创 2020-06-01 15:59:06 · 210 阅读 · 0 评论 -
数据结构与算法|第二章:复杂度分析-续
文章目录数据结构与算法|第二章:复杂度分析-续前言1.项目环境2.示例分析2.1 最好情况时间复杂度(best case time complexity)2.2 最坏情况时间复杂度(worst case time complexity)2.3 平均情况时间复杂度(average case time complexity)2.4 均摊时间复杂度(amortized time complexity)3.小结4.参考数据结构与算法|第二章:复杂度分析-续前言本章会讨论四个复杂度分析的概念最好情况时间复杂原创 2020-06-01 15:51:00 · 232 阅读 · 0 评论 -
数据结构与算法|第一章:复杂度分析
文章目录数据结构与算法|第一章:复杂度分析1.项目环境2.大 O 复杂度表示法2.1 示例12.2 示例22.3 复杂度公式3.时间复杂度分析3.1 只关注循环执行次数最多的一段代码3.2 加法法则:总复杂度等于量级最大的那段代码的复杂度3.3 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积4.常见时间复杂度分析4.1 复杂度量级4.2 O(1)4.3 O(logn) & O(nlogn)4.4 O(m+n) & O(m*n)5.空间复杂度分析6.小结7.参考数据结构与算法|第一章原创 2020-05-29 11:49:33 · 276 阅读 · 0 评论