数据结构与算法
文章平均质量分 84
愚公要移山
这个作者很懒,什么都没留下…
展开
-
翻了2000篇面经,我总结了一套《大厂高频算法题目集》
:star:前言 题目来源本文最新的题目更新在https://github.com/fengdongdongwsn/high-frequency-algorithm本文收集了在面试中,公司高频出现的算法题目。避免你在准备开始刷题或者是正在刷题时,没有目标。力扣题目实在是太多了。但是我们没有必要去把每道题都刷一遍。本系列题目主要来源如下:牛客面经整理的面经真题牛客网和力扣上高频面试题栏目收集而来:star:高频面试真题 表格中的内容很多都是力扣上的,建议牛客上的剑指offer,先刷完原创 2021-02-27 10:34:35 · 305 阅读 · 0 评论 -
2021届秋招大厂高频算法题汇总
当初在准备秋招的时候,算法是一个大难题,不知道该怎么准备,也不知道应该要刷哪些题,只能在网上看面经,然后整理一遍,下面这些题目主要来源三个方面,(1)我自己遇到的真题(2)牛客上的面经,别人遇到的真题(3)有一些大佬github上整理的,我也整理了进来。对于这些题目,在后期的面试过程当中,基本上大部分都能遇到。因此刷了这些题基本上也就差不多了,整理下来,有个三百左右。一些题外话,刷题的时候一遍可能会忘记,多刷个几遍就好,但是时间上如果来不及,建议直接重复刷这些题目。这些题目基本上都是像字节、美团原创 2020-11-16 16:01:00 · 10941 阅读 · 0 评论 -
1、并查集
在学习数据结构的时候,老师多少会提到并查集,他的应用也是超级广泛。本文首先会通过案例来对并查集有一个介绍。然后给出并查集的java实现。一、并查集原理话说在江湖上有很多门派,这些门派相互争夺武林霸主。毕竟是江湖中人,两个人见面一言不合就开干。但是打归打,总是要判断一下是不是自己人,免得误伤。于是乎,分了各种各样的门派,比如说张无忌和杨过俩人要打架,就先看看是不是同一门派的,不是的话那就再开...原创 2019-12-02 18:31:32 · 293 阅读 · 1 评论 -
java中的两种排序工具Arrays和Collections的使用
java中的排序工具主要是有两个Arrays和Collections。我们一个一个来讲解。本来写好了每一种方法的测试代码,后来又给删了,因为我觉得如果想要去了解的话,可以直接查看这些常用的即可。因为使用起来真的太简单。篇幅太长也不好。一、ArraysArrays类位于 java.util 包中,主要包含了操纵数组的各种方法。1、Array.sort(Object[] array):对数组...原创 2019-11-29 14:03:45 · 332 阅读 · 0 评论 -
3、面试官让我手写一个平衡二叉树,我当时就笑了
平衡二叉树对于初学者一直是一个比较复杂的知识点,因为其里面涉及到了大量的旋转操作。把大量的同学都给转晕了。这篇文章最主要的特点就是通过动画的形式演示。确保大家都能看懂。最后是手写一个平衡二叉树。一、概念平衡二叉树是外国的两个大爷发明的。一开始发明的是二叉查找树。后来觉得不给力演化成了平衡二叉树。那什么是二叉查找树呢?我们给出一张图来看看:看到这张图我们就会发现如下的特征。从每个节点出发,左...原创 2019-11-28 14:54:07 · 732 阅读 · 1 评论 -
面试官:手写一个希尔排序,并对其改进
希尔排序算是对简单插入排序的一种改进,属于一种增量式的排序算法。今年工作普遍不好找,HR经常让手撕代码,所以提前做好准备是最好的应对方式。一、基本原理希尔排序听名字就能想到是Shell提出来的,只是对直接插入排序做了一个基本的改进。什么改进呢?希尔排序是把序列按一定间隔分组,对每组使用直接插入排序;随着间隔减小,一直到1,使得整个序列有序我们用一张图来表示一下:上面的d表示间隔,也...原创 2019-09-22 09:55:59 · 292 阅读 · 0 评论 -
看了这么多篇红黑树文章,你理解了嘛?
很早之前就想写一篇关于红黑树的文章,但是由于担心自己理解的不透彻,就一直不敢下笔。于是在重新看了很多篇文章和资料之后,决定彻彻底底的把红黑树搞清楚。也希望让你在面试中游刃有余。OK,废话不多说,开始今天的文章。整篇文章的思路是这样的,红黑树其实就是一种数据结构,设计它的目的就是为了高效地进行增删改查,所以我们文章的顺序也会按照这个思路来进行。我们先从其他二叉树逐渐引入到红黑树,然后再详细的讲解...原创 2019-09-23 10:04:53 · 489 阅读 · 0 评论 -
面试官:给我手撕一下基数排序,再考虑一下如何进行改进呢?
到目前为止我已经把一些常见的排序算法进行了讲解。今天主要关注另外一个排序算法,叫做基数排序。每天学一个知识点,一年之后就会有质的变化。一、原理1、计数排序在正式开始讲解基数排序之前,我们先介绍一个和它同名不同字的排序算法,叫做计数排序。这个计数排序跟基数排序可不一样。可别搞混了。计数排序的思想是这样的:对每一个输入元素,计算小于它的元素个数,如果有N个元素小于它,那么它就应该放在...原创 2019-09-25 17:52:11 · 277 阅读 · 0 评论 -
如何使用java语言计算一个正整数的平方根呢(自定义Sqrt函数)?
今天的这篇文章是我在刷算法题的时候遇到的,最简单的方法是直接调用java里面的Sqrt函数,不过有时候题目中会要求我们不能使用库函数,所以在这里我们自己定义Sqrt方法。最常见的思路有两种,第一种是二分法,第二种是牛顿的微积分思想。没错,想当年大学时候学了很久很痛苦的微积分,被我第一次派上用场了。对于这两种方法我们一个一个看。一、二分法二分法的思想很简单,就是从0到N不断的去缩小范围来找一个...原创 2019-10-07 15:27:51 · 2263 阅读 · 0 评论 -
面试官:手写一个归并排序,并对其改进
之前曾介绍过快排、冒泡、插入等排序算法,这篇文章介绍一下归并排序。也算是一个比较有名的排序算法。一、排序原理归并排序的思想很简单,如果有一组待排序列,先切分再重组。任何一篇教程也都会说采用的是分治法,意思就是这么个意思,再细致一点的理解就是:将一组待排序,先分割成一个一个的元素,然后将这些元素先两两排序,再四四排序,八八排序,一直到排序完所有的元素。也就是说归并排序其实就是将已有序的子...原创 2019-09-18 15:07:29 · 518 阅读 · 0 评论 -
面试官:手写一个快速排序,并对其改进
快速排序算法算是所有排序算法中知名度最高的了,应用也超级广泛,正是由于其良好的性能才独得恩宠。今天就来好好的认识一下快速排序。一、原理快速排序一般都是使用递归来实现的,采用的是“分而治之”的思想。一组待排数据,选择一个基准元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,然后对这两部分重复同样的操作。上面的过程你会发现,这一趟扫描可以增大元素之间的移...原创 2019-09-16 13:19:25 · 304 阅读 · 0 评论 -
数据结构与算法(2)数组
上一章节回顾在上一章节中已经对数据结构的基本概念有了了解,主要就是数据结构研究的三个方面(逻辑结构、存储结构、算法)。还有两个重要的词汇:时间效率和空间效率。这一节开始了解最基本的数据结构-数组。说在前面的话还需要说明一点,学习一个新的知识点的基本顺序我觉得大体是这样的。首先要知道其基本概念(还有分类),然后了解它的特性(特殊点),因为特性决定用途,接下来就是它的用途,最后就是他的底层...原创 2019-06-04 14:03:59 · 181 阅读 · 0 评论 -
数据结构与算法(3)链表
为什么要讲链表呢?这是因为java中有很多集合类底层都是通过链表来实现的。而且面试的时候,链表的实现是经常考的一个知识点。所以这篇文章的重点在于,如何使用代码去实现这些数据结构。但是这篇文章我不打算直接上来就讲链表,而是先从线性表开始。按照惯例先给出这篇文章的大致脉络吧。首先,是对数据结构中线性表,做一个回顾。还讲了其两大存储结构,顺序存储结构和链式存储结构。接下来,重点讲各种链表的介绍,以...原创 2019-06-16 20:31:30 · 283 阅读 · 0 评论 -
数据结构与算法(4)栈
由于栈比较简单,也很容易理解,学过的人都知道一句话就可以描述栈的特性:后进先出。所以这篇文章主要是写如何使用代码来描述栈,当然也是让大家很容易理解的语言。还是先给出这篇文章的大致脉络。首先,对栈有一个基本认识接下来,用代码实现栈,以及栈的常用操作然后,介绍栈的几种应用场景最后,小结一下。OK,开始。一、初识栈 栈其实就是一个后进先出的线性表。就好比有很多辆车进了一个死胡同,第一...原创 2019-06-18 16:31:16 · 295 阅读 · 0 评论 -
数据结构与算法(5)队列
不知道你有没有过在餐厅打饭的经历,我们排的队其实就是我们今天所讲的主题,我们在排队的时候,在队列头部的人打好饭离开,新来的人排在队尾。这就是入队和出队的操作。所以,队列的特性就是先进先出。有了这个概念,就可以开始今天的主题。先给出这篇文章的大致脉络:首先,使用java语言描述了队列的基本操作,有链式存储和顺序然后,介绍循环队列和一系列需要注意的知识点最后,对队列进行一个总结。OK,...原创 2019-06-23 19:05:28 · 204 阅读 · 0 评论 -
面试官:手写一个选择排序并对其改进(java实现)
排序一直是面试中的常见算法题,不管你是找工作、还是考研、工作中使用、应付期末考试等都很常见,也很重要,因此对常见的八种排序算法,进行一个梳理。希望对你有所帮助。这是第一篇文章,讲解的是选择排序。一、选择排序原理选择排序的原理很容易理解,我们举一个例子。这几天学生开学都要军训,军训的时候就需要按照身高的高低来排位置。假设一群学生在操场上面杂乱无章的排成一列,教官从队头到队尾查找出一个身高最低的学...原创 2019-08-30 16:43:24 · 452 阅读 · 0 评论 -
面试官:如何在十亿个单词字典中,判断某个单词是否存在?(布隆过滤器)
如何在十亿个单词表中查找某个单词是否出现呢?答案已经给出来了,那就是使用布隆过滤器。那这个布隆过滤器是什么呢?下面就好好讲讲,方便在面试中提高你的zhuangbility。一、认识布隆过滤器1、概念布隆过滤器其实就是加快判定一个元素是否在集合中出现的方法。比如说在一个大字典中,要查找某个单词是否存在,于是我们就可以使用布隆过滤器,快速高效省时省力。2、原理既然布隆过滤器这么优秀,他是如何...原创 2019-08-31 11:27:11 · 465 阅读 · 2 评论 -
面试官:手写一个冒泡排序,并对其改进(java实现)
之前写过一篇选择排序,很多人把它和冒泡排序搞混了,这篇文章对冒泡排序进行一个分析,希望你能分清楚,也希望能在面试的时候能够完美的回答出冒泡排序。今年的工作据说是不好找,当然运气占很大一部分,但是实力越强运气的成分就会相应降低吧。一、认识冒泡排序之前在学习排序算法的时候,冒泡排序往往都是第一个被介绍,就是因为其太简单。冒泡排序很简单:依次比较相邻的两个数,将小数放在前面,大数放在后面。注...原创 2019-09-06 10:17:41 · 1483 阅读 · 0 评论 -
面试官:手写一个插入排序,并对其改进
插入排序也算是比较知名的一种排序算法,虽然没有快速排序用处广,今天就分析一下插入排序。一、认识插入排序插入排序的思想其实很好理解,比如说学生按照身高排位置。前N-1个同学是有序的,那么第N个同学就一个一个从低到高比较,找到合适的位置插入即可。斗地主的时候我们洗牌,就是根据大小插入或者是选择出什么牌,下面我们使用一张动图来演示一下什么是插入排序:注意:黄色部分:已经排好序的元素青色...原创 2019-09-10 14:59:03 · 241 阅读 · 0 评论 -
数据结构与算法(1)基本概念
这是我架构师系列第一篇文章,也是我的开山之作吧,所以在今后的文章中,我觉得还是要以通俗的比较容易理解的话来阐述问题。想要后续系列的文章,关注我,我会持续发布(希望你不是那个只收藏不看的人)。废话不多说,如果我们想要学好数据结构与算法,首先脑海中要时刻记住两个关键词汇,时间效率和空间效率。这个两个词汇贯穿了整个架构师知识体系。那什么是时间效率和空间效率呢?通俗的理解就是:我们使用两个不同的程序去...原创 2019-06-03 22:07:59 · 214 阅读 · 0 评论