本文转载自微信公众号《UnseriousFrontEnd》,作者UnseriousFrontEnd。转载本文请联系无良前端公众号。写在前面,可能会有人吐槽。学习算法有什么用?顶多面试大厂的时候用一下。大厂的面试算法,只是强者的敲门砖。我不想采访大厂,你不需要学习它,真的是这样吗?当然不是。在计算机行业的发展中,无论是前端还是后端,算法都是前进的绊脚石。可以说,不懂算法,永远成不了合格的前辈。工程师,如果你想进大厂,确实需要懂一些算法,但不是为了面试,跟我们的程序息息相关。有人说前端不需要算法?你把大名鼎鼎的虚拟DOM(VirtualDOM)放在哪里?其实就是算法和数据结构的体现。可能有人会说我不会写虚拟DOM。..嗯,那你总想挣钱,走技术路线想拿高薪。算法是基石。网上有很多算法文章和课程,说7天学会算法数据结构,30天掌握算法和数据结构等等,别傻了好吧,算法没有捷径,我们只能靠我们一点一滴的积累。你要做的第一件事就是要相信自己不是天才,第二就是坚持每天做题。如果时间紧,一周可以做四五道题。最好的速度是一天一题,如果后期时间充裕或者熟练的话,甚至可以一天做几道题。即使是非常聪明的人也会在一段时间后忘记算法,所以重要的是继续。让我们从头开始学习算法。如果你之前没有刷过算法的话,本文将带你了解什么是算法,什么是数据结构。在刷一个算法的时候,我们需要知道自己的解是否足够高质量,而判断一个高质量的解会通过时间和空间两个维度来体现,本文会重点介绍,这些都是必备的知识在刷算法之前,如果能给你的算法之路带来启迪,那真是太棒了,非常荣幸,如果你已经了解了这些知识,那你不妨快点看完,看看能不能扩展你的算法知识。当然,如果有错误,你也可以指导我。这是莫大的荣幸。什么是数据结构?数据结构实际上是一种存储和组织数据的程序。这样,程序中的数据元素按照一定的逻辑关系组织成一个数据结构。它是几个数据元素的组合。数据结构是程序中处理数据的基本单位。它在程序中作为一个整体使用。比如一个数字1或者一个字符A,它是一个数据结构比如一个日期2020年12月14日,它是由年月日三种格式组成的,也是一个数据结构比如数组[1,'a','2020年12月14日'],是数字、字符、日期格式的组合。它也是一种数据结构。一般来说,由一定格式组成的数据就是数据结构。我们比较常见的数据结构是字符。字符串、数组、对象、堆、栈、链表、树、哈希表等。这些数据结构中有些你可能不理解,别担心,你不需要马上知道它们是什么,因为frontend说吧,我们用的是JavaScript这种让人又爱又恨的语言,它的数据结构非常少,所以链表、树等结构都是用对象来模拟的。在程序设计中,数据结构的选择是一个基本的设计考虑。系统实施的难度和系统建设的质量很大程度上取决于是否选择了最优的数据结构。选择最优的数据结构可以有效提高系统的性能。效率和节省存储空间的使用,但是要知道没有完美的数据结构,每一种数据结构都有局限性和优势。根据需要选择合适的数据结构。什么是算法?什么是算法?我们都知道1+2+3=6。为什么等于6?你可能会说1加2等于3,两个3相加等于6,这是小学生都会知道的数学常识。它是一种广义的算法。算法实际上是对解决问题的步骤的完整描述。实现更依赖于采用的数据结构。提出问题的算法是一个从抽象到具体的过程。分析问题,选择数据结构,得到初步的解决方案。合理拆分解决方案,将其组织成许多步骤作为重复步骤。选择一个合理的循环变量,并使用一种易于转换成程序的自然语言来简洁地描述算法。了解了什么是算法之后,我们再来看时间复杂度和空间复杂度,衡量不同算法的优劣。我们通常从两个维度来考虑。时间维度:指的是执行代码所消耗的时间,即时间复杂度时间复杂度和时间复杂度在讲时间复杂度之前,我们首先要了解一个概念,就是代码执行的次数,也可以称为语句频率或时间频率。我们用T(n)一步一步地用例子来表达它。首先我们看Functionfn1functionfn1(){console.log("Endofsentence")console.log("isboyjc")}看看这个函数里面的语句会执行多少次。很明显这个函数内部只有两条语句,分别是console.log("Endofsentence")和console.log("isboyjc"),那么我们说这个函数体中的代码执行次数为2。让我们看看函数fn2functionfn2(n){for(leti=0;i
