04 2022 档案
摘要:一、快速排序思路 1.选定一个基准元素,将数组分割成两个子数组,其中一个子数组的值小于基准元素, 另外一个子数组值大于等于基准元素。 2.对子数组进行递归调用实现方法一 二、程序实现 function quick(arr) { if (arr.length <= 1) { return arr; }
阅读全文
摘要:一、题目 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 二、思路 1.首先判断根节点是否为空,空二叉树是对称的 2.根节点不为空,定义一个检测函数 { 检测左右子树是否为空的两种情况 :都为空、
阅读全文
摘要:一、题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二、思路 首先判断二叉树是否为空,递归遍历左右子树,将结果进行交换 三、程序实现 var mirrorTree = function(root) { if(!root){ return null; } //递归遍历左右子树 let le
阅读全文
摘要:一、题目 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 二、思路 1.创建一个dummy虚拟节点,定义一个遍历指针curr指向dummy 2.设置l1与l2都不为空的边界条件,比较链表l1与链表l2的值,将值小的节点赋给curr的next,移动l1或者l2, 条件判断完
阅读全文
摘要:一、题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 二、思路 1.传统方法 定义三个指针变量,pre(指向当前遍历指针的前一个节点),temp(在断开之前记录当前节点的next),curr(当前遍历指针), 令curr的next往前指向pre,然后pre与curr往前
阅读全文
摘要:一、题目 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点 二、思路 首先,通过指针p遍历链表,得到
阅读全文
摘要:一、题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 二、思路 新开辟一个数组空间,判断为偶数则push()到数组末尾,奇数则unshift()到数组前面 三、程序实现 var exchange = function(nums)
阅读全文
摘要:一、题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点 如链表 4->5->1->9 删除5变成 4->1->9 二、思路 生成一个虚拟节点dummy,首先让遍历指针curr指向dummy,设置curr的next=head,因为head有可能是待删除的
阅读全文
摘要:一、题目 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量) 输入:11 输出:3 二、思路 通过toString(2)方法将十进制整数,转换成二进制字符串,然后统计字符串中'1'的个数 三、程序实现 var hammingWeight = fu
阅读全文
摘要:一、题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,返回其最小值 二、思路 直接sort()排序,返回数组第一个数 三、程序实现 var minArray = function(numbers) { numbers.sort((a,b)=>a-b); return numbe
阅读全文
摘要:一、题目 求斐波那契数列的第n项,第0项是0,第1项是1。答案需要取模(1000000007) 二、思路 斐波那契数列某一项,等于前面两项之和。 三、程序实现 var fib = function(n) { let dp=[]; dp[0]=0; dp[1]=1; for(let i=2;i<=n;
阅读全文
摘要:一、题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回) 输入:head=[1,3,2] 输出:[2,3,1] 二、思路 遍历链表,每次利用数组的unshift()函数,每次往数组最前面添加元素,就变成倒序了 三、程序实现 var reversePrint = function(
阅读全文
摘要:一、题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20" 二、思路 利用replace()函数:relpace()只会替换第一个,replaceAll()会替换多个,不会改变原数组 三、程序实现 var replaceSpace = function(s) { let news=s.re
阅读全文
摘要:一、题目 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 输入:[2,3,1,0,2,5,3] 输出:2或者3任意一个都可以 二、思路 遍历数组利用map.ha
阅读全文
摘要:一、深浅拷贝区别 1.浅拷贝:拷贝的是对象的指针(地址),修改原对象内容,拷贝的对象也会发生变化 2.深拷贝:整个对象拷贝到内外一个内存中,修改内容互不影响 二、浅拷贝的实现 创建一个新的对象,遍历需要克隆的对象,将需要克隆对象的属性依次添加到新对象上 function clone(target)
阅读全文
摘要:1.script:会阻碍HTML解析,只有下载好,并且执行完毕,才会继续解析HTML 2.defer(推迟):推迟脚本的执行,解析完HTML后再按顺序执行脚本 3.async(异步):解析过程中执行脚本的异步下载,下载完成后立即执行,可能会阻碍HTML的解析
阅读全文
摘要:1.js的异步 js是单线程语言,它的异步是通过事件循环机制来实现的,事件循环大体由三个部分组成:运行栈(同步程序)、任务队列(异步程序)、事件循环检测。 2.异步程序可以分为宏任务和微队列 { 宏任务:计时器setTimeOut(0)、ajax、读取文件等 微任务:promise的then方法 }
阅读全文
摘要:一、什么是HTML语义化 HTML的语义化指的是合理正确的使用语义化的标签来创建页面结构,从标签上即可以直观的知道这个标签的作用,而不是滥用div 二、语义化标签 header、 nav、 main、 article、 section、 aside、 footer 等 三、语义化的优点 1.代码结构
阅读全文
摘要:一、输入读取 1.读取一个整数 let a=readInt() 2.读取一行输入(1 2 3 4) let s=read_line() //返回值s是一个字符串形式:"1234" 将字符串分割成数组元素 let arr=s.split("") //['1','2','3','4'] 3.输入第一行数
阅读全文
摘要:1.TCP向上层提供面向连接的可靠服务有重传机制 ,UDP向上层提供无连接不可靠服务。 2.虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为 3.对数据准确性要求高,速度可以相对较慢的,可以选用TCP 4.TCP有拥塞控制;UDP没有拥塞控制,因此网络出现拥塞不会
阅读全文
摘要:一、题目 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 输入:s="()" 输出:true 二、思路 1.首先设置一个map,存放正确的key-value键值对映射关系,再设置一个空栈(存放value) 2.遍历字符串 如果map的key中存在
阅读全文