数据结构与算法
一个合格的程序员当然要掌握数据结构和算法啦
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 · 163 阅读 · 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 · 241 阅读 · 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 · 975 阅读 · 0 评论 -
精卫填海系列——队列
队列的定义 队列(queue)是一种线性表数据结构,具有先进先出、后进后出的特点。 通俗的讲,队列有点像排队买票,先来的先买,后来的人只能站末尾,而且不允许插队。 队列的使用 队列和栈类似,都是“操作受限”的线性表,而且只有两个基本操作:入队enqueue(),放一个数据到队列的尾部;出队dequeue(),从队列头部取一个元素。 队列的概念很好理解,基本操作也很容易掌握。作为一种非...原创 2020-02-15 12:56:47 · 335 阅读 · 0 评论 -
精卫填海系列——栈
栈的定义 栈(stack)是一种线性表数据结构,具有后进者先出,先进者后出的特点。 通俗的讲,栈有点像摞摞的盘子。我们放盘子的时候,自下向上一个一个放;取盘子的时候,自上向下一个一个拿,不能从中间抽取。 栈的使用 从上面的定义我们可以看出,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 我刚开始接触的时候,就对它存在的意义产生了很大的疑惑。因为我觉得,相比数组和链表,栈带...原创 2020-02-09 10:22:39 · 214 阅读 · 0 评论 -
精卫填海系列——链表
链表的定义 相比数组,链表是一种稍微复杂一点的数据结构。 数组(Array)是一种线性表数据结构。它用连续的内存空间,来存储一组具有相同类型的数据。 链表(Linked list)也是一种线性表数据结构。但是它并不需要连续的内存空间,它通过“指针”用零散的内存块串联起来使用。 链表的分类 常见的有单链表、循环链表和双向链表。 单链表 我们刚刚讲到,链表通过指针将一组零散的内...原创 2020-02-03 12:09:02 · 233 阅读 · 0 评论 -
精卫填海系列——数组
数据结构的分类 数据结构按照数据的排列特点可以分为线性表和非线性表。 线性表:数据排成一排,像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。比如数组、链表、队列,栈等。 非线性表:数据之间并不是简单的前后关系。比如:树、图,堆等。 数组的定义 数组是一种很常见的数据结构,我们学习的没门语言都会涉及。那么数组又是怎样定义的呢? 数组(Array)是一种线性表数据结构。它用连续的内存...原创 2020-01-30 10:06:59 · 338 阅读 · 0 评论 -
复杂度分析
为什么需要复杂度分析? 有的人认为把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢? 这种评估算法执行效率的方法是正确的,很多书籍称它为事后统计法。但是,它的局限性也很大。 1.测试结果非常依赖测试环境 2.测试结果受数据规模的影响很大 这个时候,我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。即时间空间复杂度分析...原创 2020-01-18 20:49:52 · 335 阅读 · 0 评论