![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
一个合格的程序员当然要掌握数据结构和算法啦
mirror6
码上改变世界?不不不,我只想做个“合格”的程序猿
展开
-
LeetCode283、移动零
题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes/著作权归领扣网络所有。栗子1:输入: [0,1,0,3,12]输出: [1,3,12,0,0]思路:这是一道典型的双指针题目,P指针用来遍历数组,Q指针用来移动非零元素。最后进行置零操作。如果有什么错误或者问题,欢迎评论,我们一起探讨,一起进步。拓展:原创 2020-07-20 11:15:59 · 171 阅读 · 0 评论 -
LeetCode704、二分查找
题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-search著作权归领扣网络所有。栗子1输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4栗子2输入:原创 2020-06-23 15:13:31 · 252 阅读 · 0 评论 -
LeetCode34、在排序数组中查找元素的第一个和最后一个位置
题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array著作权归领扣网络所有。栗子1:输入: nums = [5原创 2020-06-22 20:26:41 · 981 阅读 · 0 评论 -
精卫填海系列——队列
队列的定义队列(queue)是一种线性表数据结构,具有先进先出、后进后出的特点。通俗的讲,队列有点像排队买票,先来的先买,后来的人只能站末尾,而且不允许插队。队列的使用队列和栈类似,都是“操作受限”的线性表,而且只有两个基本操作:入队enqueue(),放一个数据到队列的尾部;出队dequeue(),从队列头部取一个元素。队列的概念很好理解,基本操作也很容易掌握。作为一种非...原创 2020-02-15 12:56:47 · 344 阅读 · 0 评论 -
精卫填海系列——栈
栈的定义栈(stack)是一种线性表数据结构,具有后进者先出,先进者后出的特点。通俗的讲,栈有点像摞摞的盘子。我们放盘子的时候,自下向上一个一个放;取盘子的时候,自上向下一个一个拿,不能从中间抽取。栈的使用从上面的定义我们可以看出,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。我刚开始接触的时候,就对它存在的意义产生了很大的疑惑。因为我觉得,相比数组和链表,栈带...原创 2020-02-09 10:22:39 · 216 阅读 · 0 评论 -
精卫填海系列——链表
链表的定义相比数组,链表是一种稍微复杂一点的数据结构。数组(Array)是一种线性表数据结构。它用连续的内存空间,来存储一组具有相同类型的数据。链表(Linked list)也是一种线性表数据结构。但是它并不需要连续的内存空间,它通过“指针”用零散的内存块串联起来使用。链表的分类常见的有单链表、循环链表和双向链表。单链表我们刚刚讲到,链表通过指针将一组零散的内...原创 2020-02-03 12:09:02 · 241 阅读 · 0 评论 -
精卫填海系列——数组
数据结构的分类数据结构按照数据的排列特点可以分为线性表和非线性表。线性表:数据排成一排,像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。比如数组、链表、队列,栈等。非线性表:数据之间并不是简单的前后关系。比如:树、图,堆等。数组的定义数组是一种很常见的数据结构,我们学习的没门语言都会涉及。那么数组又是怎样定义的呢?数组(Array)是一种线性表数据结构。它用连续的内存...原创 2020-01-30 10:06:59 · 358 阅读 · 0 评论 -
复杂度分析
为什么需要复杂度分析?有的人认为把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢?这种评估算法执行效率的方法是正确的,很多书籍称它为事后统计法。但是,它的局限性也很大。1.测试结果非常依赖测试环境2.测试结果受数据规模的影响很大这个时候,我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。即时间空间复杂度分析...原创 2020-01-18 20:49:52 · 349 阅读 · 0 评论