我说我不会算法,阿里把我挂了。[通俗易懂]

我说我不会算法,阿里把我挂了。[通俗易懂]不说了,字节跳动也反手把我挂了。

大家好,又见面了,我是你们的朋友全栈君。

前言

工作已经有一段时间了,有的时候会跟同事们打趣:“如果你让我现在去手写一个快速排序,我怕是真的写不出来”。

如果不接触一段时间的算法,真的很容易就忘了。不信?你现在想想你自己能不能手写一个堆排序。

经历过校招的人都知道,算法和数据结构都是不可避免的。

在笔试的时候,最主要的就是靠算法题。像拼多多、头条这种大公司,上来就来几道算法题,如果你没AC出来,面试机会都没有。

在面试(现场面或者视频面)的时候也会问算法题,难度肯定是没有笔试的时候那么难的。我们可以想象一个场景,一面面试面到一半,面试官让你反转二叉树,问问现在的自己,你还会吗。

不扯远了,如果还在上大学的同学可以先以排序和各种的基本数据结构开始入门。

下面来简单介绍一下八大基础排序和基础的数据结构
我说我不会算法,阿里把我挂了。[通俗易懂]

冒泡排序

思路:俩俩交换,大的放在后面,第一次排序后最大值已在数组末尾。因为俩俩交换,需要n-1趟排序(比如10个数,需要9趟排序)

代码实现要点:两个for循环,外层循环控制排序的趟数,内层循环控制比较的次数每趟过后,比较的次数都应该要减1

我说我不会算法,阿里把我挂了。[通俗易懂]

选择排序

思路:找到数组中最大的元素,与数组最后一位元素交换。当只有一个数时,则不需要选择了,因此需要n-1趟排序

代码实现要点:两个for循环,外层循环控制排序的趟数,内层循环找到当前趟数的最大值,随后与当前趟数组最后的一位元素交换

我说我不会算法,阿里把我挂了。[通俗易懂]

插入排序

思路:将一个元素插入到已有序的数组中,在初始时未知是否存在有序的数据,因此将元素第一个元素看成是有序的。与有序的数组进行比较,比它大则直接放入,比它小则移动数组元素的位置,找到个合适的位置插入。当只有一个数时,则不需要插入了,因此需要n-1趟排序

代码实现:一个for循环内嵌一个while循环实现,外层for循环控制需要排序的趟数,while循环找到合适的插入位置(并且插入的位置不能小于0)

我说我不会算法,阿里把我挂了。[通俗易懂]

我说我不会算法,阿里把我挂了。[通俗易懂]

快速排序

学习快速排序的前提:需要了解递归

思路:在数组中找一个元素(节点),比它小的放在节点的左边,比它大的放在节点右边。一趟下来,比节点小的在左边,比节点大的在右边。不断执行这个操作….

代码实现:支点取中间,使用L和R表示数组的最小和最大位置。不断进行比较,直到找到比支点小(大)的数,随后交换,不断减小范围。递归L到支点前一个元素(j)。递归支点后一个元素(i)到R元素

我说我不会算法,阿里把我挂了。[通俗易懂]

归并排序

学习归并排序的前提:需要了解递归

思路:将两个已排好序的数组合并成一个有序的数组。将元素分隔开来,看成是有序的数组,进行比较合并。不断拆分和合并,直到只有一个元素

代码实现:在第一趟排序时实质是两个元素(看成是两个已有序的数组)来进行合并,不断执行这样的操作,最终数组有序,拆分左边,右边,合并…

我说我不会算法,阿里把我挂了。[通俗易懂]

堆排序

学习堆排序的前提:需要了解二叉树

思路:堆排序使用到了完全二叉树的一个特性,根节点比左孩子和右孩子都要大,完成一次建堆的操作实质上是比较根节点和左孩子、右孩子的大小,大的交换到根节点上,直至最大的节点在树顶。随后与数组最后一位元素进行交换

代码实现:只要左子树或右子树大于当前根节点,则替换。替换后会导致下面的子树发生了变化,因此同样需要进行比较,直至各个节点实现父>子这么一个条件

我说我不会算法,阿里把我挂了。[通俗易懂]

希尔排序

思路:希尔排序实质上就是插入排序的增强版,希尔排序将数组分隔成n组来进行插入排序,**直至该数组宏观上有序,**最后再进行插入排序时就不用移动那么多次位置了~

代码思路:希尔增量一般是gap = gap / 2,只是比普通版插入排序多了这么一个for循环而已。

我说我不会算法,阿里把我挂了。[通俗易懂]

基数排序(桶排序)

思路:基数排序(桶排序):将数字切割成个、十、百、千位放入到不同的桶子里,放一次就按桶子顺序回收一次,直至最大位数的数字放完~那么该数组就有序了

代码实现:先找到数组的最大值,然后根据最大值/10来作为循环的条件(只要>0,那么就说明还有位数)。将个位、十位、…分配到桶子上,每分配一次就回收一次

我说我不会算法,阿里把我挂了。[通俗易懂]

递归

递归在算法里边用得非常非常多,排序算法的快速排序和归并排序就需要用到递归(至少用递归来实现是最方便的)。

想要用递归必须知道两个条件:递归出口(终止递归的条件)和递归表达式(规律)

技巧:在递归中常常是将问题切割成两个部分(1和整体的思想),这能够让我们快速找到递归表达式(规律)

我说我不会算法,阿里把我挂了。[通俗易懂]

汉罗塔实现:

我说我不会算法,阿里把我挂了。[通俗易懂]

基本数据结构

链表、队列、二叉树、栈都是些非常基本的数据结构。针对每种的数据结构都会有对应的算法题,比如说:

  • LeetCode No206:反转链表
  • LeetCode No20:检验字符串[]{]}{]{}(这样的字符串是否有效(对齐)
  • LeetCode No104:树的最大深度
  • LeetCode No102:层序遍历树

在校招不求字典树、红黑树、图这种数据结构要会,但链表、队列、二叉树、栈这些数据结构的题(LeetCode简单) 还是应该要能做出来。

img

涵盖Java后端所有知识点的开源项目(已有5.8K star):https://github.com/ZhongFuCheng3y/3y

如果大家想要实时关注我更新的文章以及分享的干货的话,微信搜索Java3y

PDF文档的内容均为手打,有任何的不懂都可以直接来问我(公众号有我的联系方式)。

我说我不会算法,阿里把我挂了。[通俗易懂]

我说我不会算法,阿里把我挂了。[通俗易懂]

我说我不会算法,阿里把我挂了。[通俗易懂]

我说我不会算法,阿里把我挂了。[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144733.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 什么是纠删码_脑疝的常见类型

    什么是纠删码_脑疝的常见类型你能给纠删码一个好的定义吗? EthanMiller:纠删码是在丢失部分数据的情况下根据剩余数据将丢失的数据重建的一组算法。举个例子,如果我想保护六份数据,我会使用一种纠删码算法来产生两份额外的数据,这样总共就会有八份数据。这八份数据中的任意六份数据都能恢复另外两份数据。纠删码的要点是你可以选择对数据做任意数量的分片。我知道一些纠删码可以将数据至多分成200片或者奇数片,你也可以选择校验数

    2022年10月25日
  • java 分布式计算框架_java分布式系统框架的分类「建议收藏」

    java 分布式计算框架_java分布式系统框架的分类「建议收藏」鲁班学院java架构师成长路线随着电商行业的崛起,越来越多的人为了省事更习惯网购,今天我们就来熟悉Java分布式系统中的Dubbo,Dubbo就是来解决Java分布式系统中间的子系统之间相互调用相互协作的一个框架。在Dubbo之前就有一个Java分布式系统框架RPC(远程过程调用),多个子系统之间需要实现相互调用必须要借助网络来表达调用的语义和传达调用的数据,RPC采用客户机/服务器模式。请求程序…

  • WIN7(WINDOWS7)在添加网络打印机时提示这个,这里的密码是什么密码,能不能不用密码?

    WIN7(WINDOWS7)在添加网络打印机时提示这个,这里的密码是什么密码,能不能不用密码?

    2021年11月17日
  • 河北对口计算机专业一分一档6,最新!河北6市中考分数线、一分一档表→

    河北对口计算机专业一分一档6,最新!河北6市中考分数线、一分一档表→原标题:最新!河北6市中考分数线、一分一档表→邢台刚刚!邢台市区中考一分一档表公布!邯郸邯郸市2020年主城区普通高中招生最低控制分数线↓↓↓2020年邯郸中考一分一档统计表公布!沧州沧州一中录取参考线(文化分)1、沧州市区北大班:542分珍珠班:530分实验班:以教育局公布为准2、沧州各县市报到时间:7月30日,上午8:00-11:30交费(2000元)⑴现金1…

  • Web渗透测试工具[通俗易懂]

    Web渗透测试工具[通俗易懂]一、介绍是用于攻击web应用程序的集成平台。它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。这些工具设计了许多接口,以促进加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP消息,持久性,认证,代理,日志,警报的一个强大的可扩展的框架。它主要用来做安全性渗透测试。二、下载安装 2.1地址 链接:https://pan.baidu.com/s/1xhQ…

  • 2020年前端面试题及答案_结构化面试题库及答案

    2020年前端面试题及答案_结构化面试题库及答案1、javascript基本数据类型?string、number、null、underfined、booleanobject是所有对象的父对象。2、浅谈javascript中变量和函数声明的提升?变量和函数声明的提升会被提升到最顶部去执行;函数的提升高于变量的提升;如果在函数内部用var声明了与外部相同的变量,则不向下寻找;匿名函数不会被提升;不同块中互不影响。3、什么是闭包?闭包有什么特性?闭包就是能够读取其他函数内部变量的函数。闭包的特性:函数内部可以嵌套函数;内部函数可以直接

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号