![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
前端JavaScript数据结构,算法
文章平均质量分 68
自己总结的一些JavaScript基础知识和算法解决
十九万里
扶我起来 我还能继续学!!!
展开
-
力扣刷题算法笔记(javascript版)上
1、岛屿最大面积解析:提供一个数组,给了一个target 要求是在数组中找到两个数的和为target思路:1.创建一个map2、for循环遍历nums数组3、用target减nums[i]以计算哪个数跟当前数字相加等于target4、检查map里有没有这个数,有的话就放回结果,没有就把num[I]当做key。 i单做value放入map中代码实现:var towSum = function(nums, target){ const map = new Map(); for原创 2021-11-04 19:17:46 · 3061 阅读 · 2 评论 -
PHP期末知识点复习总结
1、PHP简介PHP是一种创建动态交互性站点的强有力的服务器端脚本语言PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。PHP脚本在服务器上执行php文件是什么:PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器PHP 文件的默认文件扩展名是 “.php”php优点:PHP 可在不同的平台上运行(Windows、Linux、U原创 2021-10-23 16:20:43 · 3936 阅读 · 0 评论 -
前端15k需要会的手写JS代码题(多种解题方法)
话不多说 直接上代码!!!1、JS实现一个函数 完成超过方位的两个大整数相加功能// 主要思路1:将数字转换为字符串,然后每个字符串在按位相加。function bigNumberAdd(number1, number2) { let result = '', // 保存最后结果 carry = false; // 保留进位结果 // 将字符串转换为数组 number1 = number1.split(''); number2 = number2.split('');原创 2021-10-22 10:31:08 · 861 阅读 · 2 评论 -
树的常见操作及算法(JavaScript版)
实现树的节点的插入方法:基本思想:将插入节点和当前节点做比较,如果比当前节点值小且没有左子树,则作为左子叶节点,如果比当前节点大且没有右子树,则作为右子树,循环直到最后。代码实现:insert(value) { let newNode = new Node(value); // 判断根节点是否为空,如果不为空则递归插入到树中 if (this.root === null) { this.root = newNode; } else { this.insertNode原创 2021-10-21 16:57:32 · 314 阅读 · 0 评论 -
JavaScript树的数据结构基础概念及特点(非常全)
1、树的基本概念及其类型:树的数据结构部分:主要参考这个博客1.10.2节,讲的比较详细树的基本概念和类型树是一种十分重要的数据结构。树被描述为一种分层数据抽象模型,常用来描述数据间的层级关系和组织结构。树也是一种非顺序的数据结构如上图所示,一棵完整的树包含一个位于树顶部的节点,称之为根节点(11),它没有父节点。树中的每一个元素都叫做一个节点,节点分为内部节点(图中显示为黄色的节点)和外部节点(图中显示为灰色的节点),至少有一个子节点的节点称为内部节点,没有子元素的节点称为外部节点或叶子节点。原创 2021-10-21 14:58:49 · 353 阅读 · 0 评论 -
JavaScript 7种实现排序方法原理
先上结论:每种排序的详细结解释我都放在后续的链接里了冒泡排序:基本思想是相邻的元素进行两两比较 顺序相反则进行交换,这样每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序javascript实现冒泡排序及优化选择排序:基本思想是每一趟从待排序的数据元素中选择最小(或最大)的元素作为首元素直到所有元素都排完为止。JavaScript实现选择排序及其优化插入排序:把数组分为两部分,一部分是排序好的,另一部分是没有排序好的,每次从未排序中的数组拿数插入到排序好的数组中,直到结束Jav原创 2021-10-21 11:15:34 · 142 阅读 · 0 评论 -
JavaScript实现基数排序
基数排序思想:基数排序是一种非比较型整数排序算法。其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。排序过程:将所有代比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零,然后从最低位开始 依次进行依稀排序,从最低位排序到最高位为止,直到变成一个有序序列。function radixSort(array) { let length = array.length; // 如果不是数组或者数组长度小于等于1,直接返回,不需要排序 if (!Array.isArray(a原创 2021-10-19 17:51:53 · 492 阅读 · 0 评论 -
图解排序算法(四)之归并排序
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。合并相邻有序子序列 再来看看.转载 2021-10-19 17:24:41 · 75 阅读 · 0 评论 -
图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数,供排序时调用 /** * 交换数组元素 * @param arr * @param a * @param b */ public static void swap(int []a.转载 2021-10-19 17:23:31 · 155 阅读 · 0 评论 -
图解排序算法(二)之希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 简单插入排序很循规蹈矩,不管数组分布是怎么样的.转载 2021-10-19 17:19:43 · 163 阅读 · 0 评论 -
JavaScript实现堆排序
基本思想:将待排序序列构成一个大的顶堆,此时 ,整个序列的最大值就是堆顶的根节点 将其与末尾元素进行交换,此时末尾就是最大值,然后将剩余的n-1元素构成重新构造成一个堆,这样会得到n个元素的次小值,如此反复执行 便能得到一个有序的序列// 堆排序代码实现function heapSort (array){ let length = array.length; // 如果不是数组活着数组长度小于等于1 ,直接放回 不需要排序 if (!Array.isArray(array原创 2021-10-19 16:47:21 · 387 阅读 · 0 评论 -
JavaScript实现快速排序(填坑法)
快速排序的基本思想:基本思想是通过一趟排序将要排序的数据分割成为独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后在按照此方法对这两部分数据分别进行快速排序,整个过程都可以递归进行,以此来达到整数变成有序序列代码实现:// 快速排序 代码实现function quickSort (array, start,end){ let length = array.length; // 如果不是数组或者数组长度小于等于1 直接返回,不需要排序 if(!Array.原创 2021-10-19 15:10:11 · 184 阅读 · 0 评论 -
JavaScript实现归并排序
归并排序思想:利用归并的思想实现排序,采用经典的分治策略,递归将数组两两分开知道包含一个元素,然后将数组排序合并,最终合并为排序好的数组。// 归并排序function mergeSort(array){ let length = array.length; // 如果不是数组或者数组长度小于或者等于0 的,不需要返回 if(!Array.isArray(ARRAY) || length == 0)return; if(length === 1){ re原创 2021-10-19 13:53:18 · 541 阅读 · 6 评论 -
JavaScript实现希尔排序及优化
第一个突破O(n2)的排序算法,是简单插入的改进版,会优先比较远距离的元素,希尔排序又叫缩小增量排序。希尔排序原理: 吧数组按下标的一定增量进行分组。对每组使用直接插入排序算法排序。随着增量的逐渐减少。每组包含的元素越来越多,当增量减到1的时候,整个数组恰好被分成一组,算法便终止了。描述:选择一个增量序列: t1 t2 t3 … tk t1>t2>…tk=1按增量序列个数k 对序列进行k趟排序每趟排序,根据对应的增量ti 将排序序列分割成若干长度为m的子序列,分别对各子序列进行原创 2021-10-18 17:34:40 · 124 阅读 · 0 评论 -
JavaScript实现插入排序及优化
插入排序基础原理:把整个数组分为两部分,一部分是排序好的,另外一部分是没有排序好的,每次都从未排序中的数列中拿一个数,插入到已经排序的数组中。直到未排序的数组长度为0.核心思想其实就是扑克牌思想:自己有几张排列好大小顺序的扑克牌,如果是比左边的小就放左边,依次比较,可以放右边或者放中间。在排序开始前,先从第一个数组开始计算是否顺序正确 不正确从第一个开始排列,正确的话可是直接使用排序正确的数组。代码实现:// 插入排序 function insertSort(array){ let原创 2021-10-18 15:48:52 · 174 阅读 · 0 评论 -
JavaScript实现选择排序及其优化
选择排序基本思想:每一趟从待排序的数据元素中选择最小(或最大)的元素作为首元素 直到所有元素排完为止。名词解释:时间复杂度:时间复杂度是指一个算法执行所耗费的时间空间复杂度:是指运行完一个程序所需要内存的大小稳定性:如果a=b a在b的前面,排序后a仍然在b的前面不稳定性:如果a=b a在b的前面 ,排序之后可能会发生位置变化选择排序:平均时间复杂度O(nn)最好情况O(nn)最差情况O(n*n)空间复杂度O(1)稳定性:不稳定在算法实现的时候,每一趟确定最小元素的时候都会通原创 2021-10-18 14:42:38 · 188 阅读 · 0 评论 -
javascript实现冒泡排序及优化
基本思想:相邻的元素进行两两比较,根据条件进行位置交换,每一趟会把最大或者最小的元素“冒”到顶端。最终达到完全排序利用两轮循环加if条件语句,循环比较前后两项,最后排序冒泡排序平均时间复杂度为O(n2),最坏时间复杂度为O(n2),空间复杂度为O(1),是最稳定排序基础代码实现:function Bubble(arr) { var mid; var len = arr.length - 1; for (i = 0; i < arr.length; i++) {原创 2021-10-18 13:58:46 · 583 阅读 · 0 评论 -
JavaScript中new运算符的实现机制及手写
官方解释:new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。总结:创建自定义对象或者构造函数的时候使用这里我通过几个小问题的方式来解释new运算符1、怎么创建一个自定义对象呢:1、通过编写函数,定义对象类型2、把编写的函数通过mew来创建对象实例2、new运算符有哪些参数:1、 construtor:是一个类或者函数 ,作用在于指定对象实例,没有参数一般可以省略为圆括号2、arguments:列表。被construtor调用,比如construor有多个函数原创 2021-10-11 14:23:15 · 587 阅读 · 0 评论 -
JavaScript数据结构与算法基础笔记
1、基础数据结构1.1数据结构种类数组栈队列和双端队列链表集合字典和散列表递归树二叉堆和堆排序在写每个知识点的时候 我自己总结的方式是按照定义>javascript实现方式>对应的方法>算法实现的结构去写的 后面有想法在继续补充1.2 数组1.2.1 数组定义js数组其实就是API的调用 是一种最简单的内存数据结构 数组存储一系列同一种数据类型的值注:javascript中数组可以保存不同类型的值 但是一般不推荐哈1.2.2 数组创建在javasc转载 2021-10-09 10:10:27 · 303 阅读 · 0 评论 -
JavaScript数据结构与算法基础笔记
1、基础数据结构1.1数据结构种类数组栈队列和双端队列链表集合字典和散列表递归树二叉堆和堆排序在写每个知识点的时候 我自己总结的方式是按照定义>javascript实现方式>对应的方法>算法实现的结构去写的 后面有想法在继续补充1.2 数组1.2.1 数组定义js数组其实就是API的调用 是一种最简单的内存数据结构 数组存储一系列同一种数据类型的值注:javascript中数组可以保存不同类型的值 但是一般不推荐哈1.2.2 数组创建在javasc原创 2021-09-01 11:41:03 · 761 阅读 · 1 评论 -
CSS选择器从右向左的匹配规则
下面这个栗子,CSS选择器它是如何工作的?.mod-nav h3 span {font-size: 16px;}如果不知道匹配规则,可能的理解是从左向右匹配:先找到.mod-nav,然后逐级匹配h3、span,在这个过程中如果遍历到叶子节点都没有匹配就需要回溯,继续寻找下一个分支。但事实上,CSS选择器的读取顺序是从右向左。还是上面的选择器,它的读取顺序变成:先找到所有的span,沿着span的父元素查找h3,中途找到了符合匹配规则的节点就加入结果集;如果直到根元素html都没有匹配,则不再遍.转载 2021-05-31 23:14:49 · 550 阅读 · 1 评论 -
拿捏javascript数据结构与算法(中)
上一篇:拿捏javascript数据结构与算法(上)下一篇:抽时间补上知识点:第七章:集合第八章:字典和散列表第九章:递归第十章:树第十一章:二叉堆和堆排序第七章:集合(set)集合的概念特点在es6中提出了set()方法,它允许创建唯一值的集合,集合是由一组无序且唯一的项组成,是一种不允许重复的数据结构。集合中的元素可以是简单的数据,也可以是复杂的对象,可以把它理解称为没有重复数据的数组。特点:不允许重复的顺序数据结构语法:new Set([iterable]);原创 2021-05-04 15:36:35 · 427 阅读 · 5 评论 -
JavaScript数据结构-树
文章转自:JavaScript数据结构-树 我觉得这社会上,也不差钱好多人,可能好多人也不差权力,但是我觉得能得到这种满足的也不多。 --郭小平<临汾红丝带学校校长> 树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构,以分层的方式存储数据转载 2021-05-03 11:18:44 · 255 阅读 · 0 评论 -
拿捏javascript数据结构与算法(上)
本文参考《学习javascript数据结构与算法》,根据自己整理写下,如有错误的地方,欢迎大佬指正。知识点:第一章:javascript简介第二章:ECMAscript和TypeScript概述第三章:数组第四章:栈第五章:队列和双端对列第六章:链表第七章:集合第八章:字典和散列表第九章:递归第一章js基础比较简单,在这里我就不浪费时间重复了,直接从第二章开始第二章:ECMAscript和TypeScript概述2.1 ECMAscript还是TypeScript2.2 EC原创 2021-05-02 22:19:24 · 1851 阅读 · 10 评论 -
浏览器输入URL到页面呈现详细过程(前端面试必问)
知识点:1.寻找ip2.构造http请求3、http响应4.构建DOM树5、构建CSSOM树6、构建渲染树7、layout回流8、painting重绘9、页面渲染10.面试常问相关知识点1、寻找ip在浏览器中输入ip后,浏览器需要先寻找这个url域名的服务器ip。浏览器先会查看缓存中是否有记录,查找缓存的顺序为:1、先查找浏览器缓存,后查找系统缓存,最后查看路由器缓存。2、 如果本地缓存中没有则查找系统hosts文件中是否有记录3、如果还是没有则继续查询DNS服务器,4.原创 2021-04-25 17:53:21 · 685 阅读 · 2 评论