算法
守望之名
这个作者很懒,什么都没留下…
展开
-
工作中几乎用不到算法,为何要学算法?
前言不知道你有没有发现,非算法类的岗位,工作之后几乎没有用到什么算法,为什么还要学算法?本文谈谈自己的看法,不供参考。从用人者角度毋庸置疑,面试是用来筛选候选人的,在这个僧多粥少的时候,就需要提高筛选条件,例如最常见的学历,不是说学历一般的人不好,而是总体来说,学历好的人里面挑选到合适的概率比较大而已,这就是现实。而面试题中,算法相比于其他记忆型的题目,就能很好的体现一个人的逻辑...原创 2019-11-14 14:02:24 · 2305 阅读 · 1 评论 -
什么是优先队列?
来源:公众号【编程珠玑】作者:守望先生前言我们之前已经介绍过《如何自己实现一个队列》,它们是先入先出的,这很容易用平常的排队来理解。但是如果这个队列要支持有紧急情况的人先出队呢?原先那种队列就不再适用了,我们需要使用本文所提到的特殊队列--优先队列。优先队列优先队列也是一种抽象数据类型。优先队列中的每个元素都有优先级,而优先级高(或者低)的将会先出队,而优先级相同的则...原创 2019-05-20 07:32:00 · 22007 阅读 · 1 评论 -
图解:基于二叉堆的堆排序是如何实现的?
来源:公众号【编程珠玑】作者:守望先生前言我们在介绍《什么是优先队列》的时候就注意到,如果每次都删除堆顶元素,那么将会得到一个有序的数据。因此,我们可以利用二叉堆来对数据进行排序。堆排序分析通过前面的学习我们可以看到,如果构建一个二叉堆,最后每次从堆顶取出一个元素,那么最终取出元素就是有序的,不过如果要用来对数据按照从小到大排序,就不是构造小顶堆,而是大顶堆了,即堆顶...原创 2019-06-05 07:31:00 · 287 阅读 · 0 评论 -
这些算法可视化网站助你轻松学算法
来源:公众号【编程珠玑】作者:守望先生前言无疑,数据结构与算法学习最大的难点之一就是如何在脑中形象化其抽象的逻辑步骤。而图像在很多时候能够大大帮助我们理解其对应的抽象化的东西,而如果这个图像还是我们自己一点点画出来的,那么无疑这个印象是最深刻的了。没错,今天给大家分享的就是算法可视化的网站。Data Structure Visualizations网站地址为:http...原创 2019-06-17 07:31:00 · 14255 阅读 · 2 评论 -
动画:二叉树遍历的多种姿势
前言在《什么是二叉树》中,我们介绍了二叉树的创建(插入),查找和删除,本文将介绍二叉树的遍历。而二叉树遍历有多种形式,他们也可以应用在不同的场景中,常见的深度优先遍历方式有前序遍历,中序遍历,后序遍历,而不常用广度优先遍历方式有层次遍历。本文将会对以上遍历方式都进行介绍。二叉树的遍历常见遍历顺序有以下几种: 前序遍历,先检查节点值,然后递归遍历左子树和右子树 中序遍历,...原创 2019-04-17 07:25:00 · 1495 阅读 · 0 评论 -
什么是散列表(哈希表)?
本文文末有福利,不要错过奥!前言假设你们班级100个同学每个人的学号是由院系-年级-班级和编号组成,例如学号为01100168表示是1系,10级1班的68号。为了快速查找到68号的成绩信息,可以建立一张表,但是不能用学号作为下标,学号的数值实在太大。因此将学号除以1100100取余,即得到编号作为该表的下标,那么,要查找学号为01100168的成绩的时候,只要直接访问表下标为68的数据即可...原创 2019-05-06 07:30:00 · 3387 阅读 · 0 评论 -
如何自己实现一个栈
前言栈是一种应用广泛的数据结构,例如函数的调用就需要使用栈,其实我们在介绍《快速排序优化详解》的时候也使用到了栈结构。栈最鲜明的特点就是后进先出,一碟盘子就是类似这样的结构,最晚放上去的,可以最先拿出来。本文将介绍的是如何自己实现一个栈结构。栈的操作栈的常见操作有出栈(POP),从栈中弹出一个元素;入栈(PUSH),将一个元素压入栈中,访问栈顶元素(TOP),判断栈是否为空等。栈的...原创 2019-03-18 00:01:00 · 8674 阅读 · 0 评论 -
剑指offer:调整数组顺序使奇数位于偶数前面
目录 题目 分析 解法一 解法二 解法三 运行效率比较 扩展 总结 题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。分析事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复杂度不尽相同。解法一书中作者提到一种初...原创 2019-03-01 00:01:00 · 412 阅读 · 0 评论 -
快速排序深度优化详解
更多详情见原文:快速排序优化详解正如它的名字所体现,快速排序是在实践中最快的已知排序算法,平均运行时间为O(NlogN),最坏的运行时间为O(N^2)。算法的基本思想很简单,然而想要写出一个高效的快速排序算法并不是那么简单。基准的选择,元素的分割等都至关重要,如果你不清楚如何优化快速排序算法,本文你不该错过。算法思想快速排序利用了分治的策略。而分治的基本基本思想是:将原问题划分为若干与原问...原创 2019-02-24 17:25:36 · 26334 阅读 · 3 评论 -
面试官问你斐波那契数列的时候不要高兴得太早
前言假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了。如果真这么想,那就危险了。 递归求斐波那契数列递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。斐波那契数列的计算表达式很简单:F(n) = n; n = 0,1F(n) = F(n-1) + F(n-2),n >= 2;因此,我们能很快根据表达式写出递...原创 2019-01-08 19:07:41 · 1900 阅读 · 4 评论