
JavaScript刷题
主要是刷大厂高频面试题,外加一些乱七八糟的题,都是用js哦
钧桐
怕什么真理无穷?进一寸有进一寸的欢喜!
展开
-
从数硬币来比较贪心算法和动态规划
其实,在刚接触编程时候,对于贪心算法和动态规划的区别一直感觉比较模糊,今天就数硬币这道题,来和大家认识一下贪心算法和动态规划。原创 2022-06-27 20:52:18 · 372 阅读 · 0 评论 -
[javascript]合并区间
56.合并区间写在前面题目示例1示例2题解写在前面有些日子没刷题了,突然一刷,玛德,惊出一身冷汗题目以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6]原创 2021-11-12 11:41:30 · 614 阅读 · 0 评论 -
[javascript]二叉搜索树与双向链表
二叉搜索树与双向链表描述输入描述返回值描述示例1示例2代码描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数 0 \le n \le 10000≤n≤1000,二叉树中每个节点的值 0\le val \le 10000≤val≤1000要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度 O(n)O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需原创 2021-10-21 10:02:51 · 368 阅读 · 0 评论 -
[javascript]复杂链表的复制
复杂链表的复制描述代码描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。示例:输入:{1,2,3,4,5,3,5,#,2,#}输出:{1,2,3,4,5,3,5,#,2,#}原创 2021-10-21 09:49:13 · 190 阅读 · 0 评论 -
[javascript]接雨水问题
接雨水问题描述示例思路与代码描述给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。(数组以外的区域高度视为0)示例输入:[3,1,2,5,2,4] 返回值:5 说明:数组 [3,1,2,5,2,4] 表示柱子高度图,在这种情况下,可以接 5个单位的雨水,蓝色的为雨水 ,如题面图。思路与代码1.这个接雨水,其实就是一个木桶效应,首先最大的是边,然后雨水其实就是边的另一边的一些差值2.关键是如何简化这个过程原创 2021-10-14 09:50:52 · 293 阅读 · 0 评论 -
[javascript]二叉树的最小深度
二叉树的最小深度描述示例1代码描述求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。示例1输入:{1,2,3,4,5}返回值:2代码/* * function TreeNode(x) { * this.val = x; * this.left = null; * this.right = null; * } *//** * * @param root TreeNode类 * @return int整型 */原创 2021-10-12 09:42:34 · 139 阅读 · 0 评论 -
[javascript]二叉树根节点到叶子节点和为指定值的路径
二叉树根节点到叶子节点和为指定值的路径描述代码描述给定一个节点数为 n 的二叉树和一个值 sum ,请找出所有的根节点到叶子节点的节点值之和等于的路径,如果没有则返回空。例如:给出如下的二叉树,sum = 22 ,返回[[5,4,11,2],[5,8,9]]代码找了半天bug没找出来,20个样例过了13个,先码出来,后面再改/* * function TreeNode(x) { * this.val = x; * this.left = null; * this原创 2021-10-04 10:05:22 · 694 阅读 · 0 评论 -
[javascript]买卖股票的最好时机
买卖股票的最好时机描述示例1示例2代码与分析描述假设你有一个数组,其中第 i 个元素是股票在第i天的价格。你可以买入一次股票和卖出一次股票(并非每天都可以买入或卖出一次,总共只能买入和卖出一次),问能获得的最大收益是多少。示例1输入:[1,4,2]返回值:3示例2输入:[2,4,1]返回值:2代码与分析我们来定义一个二维数组dp[][],其中dp[i][0]表示第i+1天(i是从0开始的)结束的时候没持有股票的最大利润,dp[i][1]表示第i+1天结束的时候持有股票的最大原创 2021-09-30 09:00:40 · 230 阅读 · 0 评论 -
[javascript]包含min函数的栈
包含min函数的栈描述代码描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数,并且调用 min函数、push函数 及 pop函数 的时间复杂度都是 O(1)push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素示例:输入: [“PSH-1”,“PSH2”,“MIN”,“TOP”,“POP”,“PSH1”,“TOP”,“MIN”]输出: -1,2,1,-1解析:"PSH-1"表示将-原创 2021-09-29 10:22:52 · 172 阅读 · 0 评论 -
[JavaScript]在旋转过的有序数组中寻找目标值
在旋转过的有序数组中寻找目标值描述分析与代码描述有一个长度为 n 的按严格升序排列的整数数组 nums ,在实行 search 函数之前,在某个下标 k 上进行旋转,使数组变为[nums[k],nums[k+1],…,nums[nums.length-1],nums[0],nums[1],…,nums[k-1]]。给定旋转后的数组 nums 和一个整型 target ,请你查找 target 是否存在于 nums 数组中并返回其下标(从0开始计数),如果不存在请返回-1。比如,数组[0,2,4,6,原创 2021-09-29 09:20:59 · 236 阅读 · 0 评论 -
[JavaScript]求平方根
求平方根描述代码直接使用函数暴力二分查找描述实现函数 int sqrt(int x).计算并返回 x 的平方根(向下取整)代码直接使用函数/** * * @param x int整型 * @return int整型 */function sqrt( x ) { // write code here return Math.floor(Math.sqrt(x))}module.exports = { sqrt : sqrt};暴力/**原创 2021-09-27 09:31:50 · 1386 阅读 · 0 评论 -
[JavaScript]重建二叉树
重建二叉树描述代码描述给定节点数为 n 二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length == pre.length2.pre 和 vin 均无重复元素3.vin出现的元素均出现在 pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比代码1.先找中序中的结点2.找到后就可以找左右结点了3.递归就可以得原创 2021-09-26 16:25:43 · 218 阅读 · 0 评论 -
[JavaScript]数组中相加和为0的三元组
数组中相加和为0的三元组描述示例代码描述给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。注意:三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)解集中不能包含重复的三元组。示例输入:[-2,0,1,1,2]返回值:[[-2,0,2],[-2,1,1]]代码/** * * @param num int整型一维数组 * @return int整型二维数组 */function threeSum( num原创 2021-09-26 14:05:27 · 395 阅读 · 0 评论 -
[JavaScript]螺旋矩阵
螺旋矩阵描述示例1代码描述给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。示例1输入:[[1,2,3],[4,5,6],[7,8,9]]返回值:[1,2,3,6,9,8,7,4,5]代码/** * * @param matrix int整型二维数组 * @return int整型一维数组 */function spiralOrder( matrix ) { // write code here let m=matrix.leng原创 2021-09-25 09:02:22 · 635 阅读 · 0 评论 -
[JavaScript]反转字符串
反转字符串科班做法:split,reverse,join循环unshift双指针科班做法:split,reverse,join1.转换为数组2.反转3.转换为字符串/** * 反转字符串 * @param str string字符串 * @return string字符串 */function solve( str ) { // write code here return str.split('').reverse().join('')}module.expo原创 2021-09-23 08:42:40 · 86 阅读 · 0 评论 -
[JavaScript]在二叉树中找到两个节点的最近公共祖先
在二叉树中找到两个节点的最近公共祖先描述示例1代码与分析描述给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。注:本题保证二叉树中每个节点的val值均不相同。示例1输入:[3,5,1,6,2,0,8,#,#,7,4],5,1返回值:3代码与分析其实,这题思路很重要,分成三种情况去考虑就很好做1.都在右侧,左侧没找到(-1),右侧先遇到的就是公共祖先2.都在左侧,右侧没找到(-1),左侧先遇到的就是公共祖先原创 2021-09-23 08:30:21 · 410 阅读 · 0 评论 -
[JavaScript]两个链表生成相加链表
两个链表生成相加链表描述示例代码描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。示例输入:[9,3,7],[6,3]返回值:{1,0,0,0}代码直接翻转链表,然后每个结点相加,最后再次翻转function ListNode(x){ this.va原创 2021-09-22 11:19:13 · 346 阅读 · 0 评论 -
[JavaScript]两个链表的第一个公共结点
两个链表的第一个公共结点描述示例1代码描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n<=1000要求:空间复杂度O(1) ,时间复杂度 O(n)示例1输入:{1,2,3},{4,5},{6,7}返回值:{6,7}说明:第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个原创 2021-09-22 10:23:46 · 119 阅读 · 0 评论 -
[JavaScript]最长公共子串
最长公共子串描述示例代码暴力动态规划描述给定两个字符串str1和str2,输出两个字符串的最长公共子串原创 2021-09-21 12:07:45 · 1513 阅读 · 3 评论 -
[JavaScript]按之字形顺序打印二叉树
按之字形顺序打印二叉树描述js代码描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]js代码这题就和层序遍历一样的,多了一个深度的判断而已/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} *原创 2021-09-21 10:02:23 · 127 阅读 · 0 评论 -
[JavaScript]大数加法
大数加法描述示例1代码描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)示例1输入:"1","99"返回值:"100"说明:1+99=100代码/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @原创 2021-09-20 09:57:57 · 140 阅读 · 0 评论 -
[JavaScript]删除链表的倒数第n个节点
文章目录描述示例1js代码描述给定一个链表,删除链表的倒数第 nn 个节点并返回链表的头指针例如,给出的链表为: 1\to 2\to 3\to 4\to 51→2→3→4→5, n= 2n=2.删除了链表的倒数第 nn 个节点之后,链表变为1\to 2\to 3\to 51→2→3→5.备注:题目保证 nn 一定是有效的请给出时间复杂度为\ O(n) O(n) 的算法示例1输入:{1,2},2 返回值:{2}js代码直接双指针了// function ListN原创 2021-09-19 09:54:50 · 328 阅读 · 0 评论 -
[JavaScript]括号序列
括号序列描述示例1示例2js代码描述给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。示例1输入:"["返回值:false示例2输入:"[]"返回值:truejs代码利用堆栈的思想去做括号匹配/** * * @param s string字符串 * @return bool布尔型 */v原创 2021-09-17 09:40:17 · 154 阅读 · 0 评论 -
[JavaScript]反转字符串
反转字符串描述示例1代码描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)示例1输入:"abcd"返回值:"dcba"代码这个就是split,reverse,join三步虎,直接搞定!/** * 反转字符串 * @param str string字符串 * @return string字符串 */function solve( str ) { // write code here return str.split(原创 2021-09-17 09:14:29 · 108 阅读 · 0 评论 -
[JavaScript]合并两个有序的数组
合并两个有序的数组描述示例1示例2题解自带sort从后往前排序描述给出一个整数数组 和有序的整数数组A ,请将数组 B合并到数组A 中,变成一个有序的升序数组注意:1.可以假设A数组有足够的空间存放B 数组的元素,A 和B 中初始的元素数目分别为 m和n ,的数组空间大小为m + n2.不要返回合并的数组,返回是空的,将数组B 的数据合并A到里面就好了3.A数组在[0,m-1]的范围也是有序的示例1输入:[4,5,6],[1,2,3]返回值:[1,2,3,4,5,6]说明:A数组为原创 2021-09-15 10:38:33 · 246 阅读 · 0 评论 -
[JavaScript]最长无重复子数组
最长无重复子数组描述示例1示例2示例3示例4示例5思路代码描述给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组示例1输入:[2,3,4,5]返回值:4说明:[2,3,4,5]是最长子数组示例2输入:[2,2,3,4,3]返回值:3说明:[2,3,4]是最长子数组示例3输入:[9]返回值:1示例4输入:原创 2021-09-15 10:05:31 · 267 阅读 · 0 评论 -
[JavaScript]子数组的最大累加和问题
子数组的最大累加和问题描述示例1首先列出状态转移方程动态规划描述给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.题目保证没有全为负数的数据[要求]时间复杂度为O(n),空间复杂度为O(1)示例1输入:[1, -2, 3, 5, -2, 6, -1]返回值:12首先列出状态转移方程dp[0]=arr[0]dp[i-1]>0 =>d原创 2021-09-15 09:42:20 · 190 阅读 · 0 评论 -
[JavaScirpt]链表中的节点每k个一组翻转
链表中的节点每k个一组翻转描述示例1代码描述将给出的链表中的节点每\ k k 个一组翻转,返回翻转后的链表如果链表中的节点数不是\ k k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。要求空间复杂度 \ O(1) O(1)例如:给定的链表是1→2→3→4→5对于 k = 2 k=2, 你应该返回 2→1→4→3→5对于 k = 3 k=3, 你应该返回 3→2→1→4→5示例1输入:{1,2,3,4,5},2返回值:{2,1,4,3,5}代码原创 2021-09-14 11:10:11 · 146 阅读 · 0 评论 -
[JavaScript]跳台阶
跳台阶描述示例1示例2代码描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入:2返回值:2示例2输入:7返回值:21代码利用分治的思想。递归。function jumpFloor(number){ // write code here if(number<=0) return -1 else if(number==1) return 1 else if(原创 2021-09-14 10:15:18 · 175 阅读 · 0 评论 -
[JavaScript]两数之和
两数之和描述示例1代码描述给出一个整数数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2)组成的数组,需要满足 index1 小于index2.。注意:下标是从1开始的保证给出的数组中只存在唯一解。例如:给出的数组为 [20, 70, 110, 150] , 目标值为90返回一个数组 [1,2] ,因为 numbers _1+numbers _2=20+70=90numbers原创 2021-09-12 09:00:39 · 332 阅读 · 0 评论 -
[JavaScript]求二叉树的层序遍历
求二叉树的层序遍历描述示例1示例2js代码描述给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]示例1输入:{1,2}返回值:[[1],[2]]示例2输入:{1,2,3,4,#,#,5}返回值:[[1],[2,3],[4,5]]js代码/* * function TreeNode(x) { * this.val原创 2021-09-11 10:37:58 · 279 阅读 · 0 评论 -
链表与环(找相遇点和入口)
链表与环题目一:判断链表中是否有环解法一:双指针解法二:哈希表题目二:链表中环的入口结点题目一:判断链表中是否有环解法一:双指针/* * function ListNode(x){ * this.val = x; * this.next = null; * } *//** * * @param head ListNode类 * @return bool布尔型 */function hasCycle( head ) { // write code here原创 2021-09-09 09:43:56 · 165 阅读 · 0 评论 -
[JavaScript]最小的k个数
最小的k个数题目sort()解法快排解法c++堆排序题目给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。0 <= k <= input.length <= 100000 <= input[i] <= 10000sort()解法function GetLeastNumbers_Solution(input, k){ // write code here var arr=in原创 2021-09-10 10:46:09 · 282 阅读 · 2 评论 -
JS中的排序(七行手撕快排)
JS中的排序直接使用给定规则的sort()七行手撕快排正常手撕快排直接使用给定规则的sort()/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型一维数组 待排序的数组 * @return int整型一维数组 */function MySort( arr ) { // write code here return arr.sort((a,b)=>{ return原创 2021-09-08 10:50:43 · 131 阅读 · 0 评论 -
反转链表(进阶:选用迭代和递归方式完成反转!)
反转链表描述示例JS代码迭代递归描述输入一个链表,反转链表后,输出新链表的表头。示例输入:{1,2,3}返回值:{3,2,1}JS代码迭代/*function ListNode(x){ this.val = x; this.next = null;}*/function ReverseList(pHead){ // write code here var p1=pHead var p2=null while(p1){原创 2021-09-08 09:14:33 · 122 阅读 · 0 评论 -
[JavaScript]合并两个排序的链表
合并两个排序的链表描述示例1代码非递归做法递归做法描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。示例1输入:{1,3,5},{2,4,6}返回值:{1,2,3,4,5,6}代码非递归做法function ListNode(x){ this.val = x; this.next = null;}function Merge(pHead1, pHead2){ // write code here le原创 2021-09-12 09:43:17 · 108 阅读 · 0 评论 -
[JavaScirpt]用两个栈实现队列
用两个栈实现队列描述示例1代码描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:[“PSH1”,“PSH2”,“POP”,“POP”]返回:1,2解析:“PSH1”:代表将1插入队列尾部“PSH2”:代表将2插入队列尾部"POP“:代表删除一个元素,先进先出=>返回1"POP“:代表删除一个元素,先进先出=>返回2示例1输入:原创 2021-09-12 10:06:36 · 92 阅读 · 0 评论 -
[JavaScript]寻找第K大
寻找第K大描述示例1示例2代码sort slice解法经典快排描述有一个整数数组,请你根据快速排序的思路,找出数组中第k 大的数。给定一个整数数组 ,同时给定它的大小n和要找的 ,请返回第k 大的数(包括重复的元素,不用去重),保证答案存在。要求时间复杂度 O(n)示例1输入:[1,3,5,2,2],5,3返回值:2示例2输入:[10,10,9,9,8,7,5,6,4,3,4,2],12,3返回值:9说明:去重后的第3大是8,但本题要求包含重复的元素,不用去重,所以输出9原创 2021-09-11 10:02:45 · 443 阅读 · 1 评论 -
实现二叉树先序,中序和后序遍历(递归在手,天下我有)js解法
实现二叉树先序,中序和后序遍历什么是二叉树的先序中序后序遍历呢?描述示例1代码什么是二叉树的先序中序后序遍历呢?我的简单理解就是,先中后指的是root根节点的位置,比如先序就是根节点放在前面同理,中序是根节点放在中间剩下的位置由左右节点来分配,都是先左后右描述分别按照二叉树先序,中序和后序打印所有的节点。示例1输入:{1,2,3}返回值:[[1,2,3],[2,1,3],[2,3,1]]代码这里写的是三合一函数/* * function TreeNode(x) { *原创 2021-09-09 09:03:51 · 186 阅读 · 0 评论 -
LRU缓存算法的实现(js与c++)
LRU缓存算法的实现写在前面NC93 设计LRU缓存结构描述js解法面试题16.25.LRU缓存描述js解法c++解法写在前面LRU算法是一个面试常考的题,这篇博客就来写写js和c++的解法真题如下NC93 设计LRU缓存结构描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值提示:1.某个key的set或get操作一旦发生原创 2021-09-06 16:41:57 · 303 阅读 · 0 评论