名企高频面试算法题--TOP200(JS实现)
名企高频面试算法题--TOP200(JS实现)
C.&H.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
93、快手---最长的括号子串
一、题目二、实现思路:复杂度分析:时间复杂度: O(n),n 是给定字符串的长度。我们只需要遍历字符串一次即可。空间复杂度: O(n)。栈的大小在最坏情况下会达到 n,因此空间复杂度为 O(n) 。/** * * @param s string字符串 * @return int整型 */function longestValidParentheses( s ) { let maxlen = 0; let arr = [-1]; /.原创 2021-10-19 19:42:34 · 215 阅读 · 0 评论 -
92、快手---作用域输出问题
// 问题一var count = 10;function a() { return count + 10;}function b() { var count = 20; return a();}console.log(b()); //20// 问题二var a = [1, 2, 3, 4];function set(a) { a = [5, 6, 7, 8];}set(a);console.log(a); //[1,2,3,4]var a =.原创 2021-10-19 17:09:21 · 274 阅读 · 0 评论 -
91、快手--去除3个及以上重复的字符
题目:去除数组中3个及以上相邻的0const data = [1, 2, 3, 0, 0, 0, 5, 2, 0, 1, 0, 0, 2];//去除三个及以上相邻的0//返回结果:[1,2,3,5,2,0,1,0,0,2]//去除三个及以上相邻的0const data = [1, 2,0,0, 3, 0, 0, 0,0, 5, 2, 0, 1, 0, 0, 0];// [1, 2, 0, 0, 3, 5, 2, 0, 1]//const data = [1, 2, 3, ...原创 2021-10-19 16:59:08 · 2175 阅读 · 0 评论 -
90、快手---机器人的运动范围
一、题目地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?/** * @param {number} m * @param {nu.原创 2021-10-19 12:58:02 · 162 阅读 · 0 评论 -
89、小米一面---- 编辑距离(动态规划)
编辑距离_牛客题霸_牛客网原创 2021-10-12 20:47:16 · 159 阅读 · 0 评论 -
88、美团CSS题---dom节点查找
一、题目描述查找两个节点的最近的一个共同父节点,可以包括节点自身输入描述:oNode1 和 oNode2 在同一文档中,且不会为相同的节点二、实现原创 2021-10-03 18:33:47 · 251 阅读 · 0 评论 -
87、美团算法题---重排链表
一、题目二、实现方法一:使用数组/* * function ListNode(x){ * this.val = x; * this.next = null; * } *//** * * @param head ListNode类 * @return void */function reorderList( head ) { // if(!head || !head.next){return;} let arr = []; ..原创 2021-10-03 14:30:42 · 160 阅读 · 0 评论 -
86、美团算法题---匹配字符串中的所有数字
匹配字符串中的所有数字,包括科学计数法、小数、分数和负数。const str = '这是一篇文章:加快递费3.22X10^5,就开始的经费3673降低开jvjsldfjXDJKFLD发洛索洛芬2/3,是杜绝浪费0.12345,晋升的了客服-2344'// ['3.22X10^5',3673,'2/3',0.12345,-2344]分析:对于数字,包含正数和负数;-、/、X、^、. 后必须有数字;/、X、^、. 前必须有数字;实现:const str = '这是一篇文..原创 2021-10-03 13:14:10 · 263 阅读 · 0 评论 -
85、美团算法题---验证ip地址
验证IP地址_牛客题霸_牛客网一、题目编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。IPv4 地址:由 十进制数 和 点 来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1; 同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6 地址:由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如, 2001:0db8:85.原创 2021-10-03 09:57:27 · 490 阅读 · 0 评论 -
84、美团算法题---根据先中序构建二叉树,并打印右视图
一、题目二、实现/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求二叉树的右视图 * @param xianxu int整型一维数组 先序遍历 * @param zhongxu int整型一维数组 中序遍历 * @return int整型一维数组 */function solve( xianxu , zhongxu ) { //1. 先构建二叉树 let l1 = 0, h1 = xianxu.length-1;.原创 2021-10-03 08:12:28 · 199 阅读 · 0 评论 -
83、美团算法题---二叉树根节点到叶子节点和为指定值的路径
一、二叉树根节点到叶子节点和为指定值的路径(1)题目给定一个节点数为 n 的二叉树和一个值 sum ,请找出所有的根节点到叶子节点的节点值之和等于的路径,如果没有则返回空。例如:给出如下的二叉树,sum = 22 ,(2)思路(3)实现/* * function TreeNode(x) { * this.val = x; * this.left = null; * this.right = null; * } *//** * ..原创 2021-10-03 07:50:48 · 314 阅读 · 0 评论 -
82、美团算法题---最长回文子串
最长回文子串 力扣一、题目给你一个字符串s,找到s中最长的回文子串。二、思路我们知道回文串一定是对称的,所以我们可以每次循环选择一个中心,进行左右扩展,判断左右字符是否相等即可。由于存在奇数的字符串和偶数的字符串,所以我们需要从一个字符开始扩展,或者从两个字符之间开始扩展,所以总共有n+n-1个中心。三、实现var longestPalindrome = function (s) { if (s == null || s.length ...原创 2021-10-03 06:57:57 · 210 阅读 · 0 评论 -
81、美团算法题---最小路径和(动态规划)
一、题目给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。二、思路三、实现/** * @param {number[][]} grid * @return {number} */var minPathSum = function(grid) { let m = grid.length; let n = grid[0].length; ...原创 2021-10-03 06:57:05 · 619 阅读 · 0 评论 -
80、美团智力题---数组中只出现一次的数(其它数出现k次)
一、题目二、实现function foundOnceNumber( arr , k ) { arr.sort(); //排序 for(let i=0;i<arr.length;){ if(arr[i]==arr[i+1]){ //跳过重复出现k次的元素 i += k; }else{ return arr[i] } }}...原创 2021-10-02 22:02:30 · 176 阅读 · 0 评论 -
79、美团算法题---为Strng添加方法repeatify
输入console.log("hello".repeatify(3)) 输出hellohellohello String.prototype.repeatify = function(num){ let res = "" for(let i=0;i<num;i++){ res += this; } return res; } console.log("hello".repeatify(3)); //hellohellohello..原创 2021-10-02 21:23:04 · 221 阅读 · 0 评论 -
78、美团CSS编程题----div n靠右对齐,其他div靠左对齐
如何使得divn靠右对齐而其他div靠左对齐div.parent div1 div2 div3 … divn实现:使用伪类选择器last-child<style> .parent div{ width: 100px; height: 100px; border: 1px solid black; } div:last-child{ position: absolute; ri原创 2021-10-02 21:13:26 · 359 阅读 · 0 评论 -
77、美团算法题---连续子数组的最大和
连续子数组的最大和_牛客题霸_牛客网一、问题二、实现function FindGreatestSumOfSubArray(arr){ let res = arr[0]; //避免全为负数的情况 let sum = 0; for(let i=0;i<arr.length;i++){ if(sum>0){ sum+=arr[i]; }else{ sum = arr...原创 2021-10-02 20:50:28 · 149 阅读 · 0 评论 -
76、最长公共... 和 最长递增... 类型的算法题汇总
目录一、最长公共子序列(不连续)---动态规划1.1 最长公共子序列和最长公共子串的区别1.2 求最长公共子序列(LCS)的思路:动态规划1.3 实现二、最长公共子串(连续)--- 滑动窗口2.1 思路2.2 实现 方法一:滑动窗口2.3 实现 方法二:动态规划(复杂度高)三、最长公共前缀(连续)3.1 描述3.2 思路:3.3 实现:四*、最长递增子序列(不连续)---- 贪心+二分法4.1 描述4.2 思路4.3 实现...原创 2021-10-02 20:36:29 · 365 阅读 · 0 评论 -
75、美团算法题---对角线遍历数组
一、题目1:对角线遍历I(1)题目给你一个大小为m x n的矩阵mat,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。(2)思路根据题目描述,首先仔细找一下这道题中一些数字上的规律。(可以结合题目给的图来看)(3)实现/** * @param {number[][]} mat * @return {number[]} */var findDiagonalOrder = function(arr) { let m = arr.l...原创 2021-10-02 17:04:59 · 6377 阅读 · 0 评论 -
74、美团算法题---使用log函数,实现升序打印0到100
一、题目只能用这个log函数,来实现升序打印0到100const log=(callback)=>{ log.count = log.count || 0; var count = log.count++ setTimeout(()=>{ console.log(count) callback && callback() },Math.random()*1000%10)}二、思路使用循环调用。原创 2021-10-02 16:28:07 · 230 阅读 · 0 评论 -
73、美团算法题---用CSS实现一个3×3九宫格
一、使用grid布局参考Grid布局简介 - 云+社区 - 腾讯云(1)fr单位:CSS 栅格布局带来了一个全新的值:fraction单位,fraction单位通常简写为fr,它允许你根据需要将容器拆分为多个块。如果我们将grid-template-columns的值更改为1fr 2fr 1fr。总宽现在是四个 fraction 单位,第二列的宽度将会是其它两列的两倍,其它列各占一个 fraction,此时这些子元素都会随着外层盒子container宽度的变化而变化。(2)repeat(参数原创 2021-10-02 16:17:15 · 653 阅读 · 0 评论 -
71、美团算法题---对象键名数组排序
一、题目:按照键值从大到小排序,输出排序后对应的键名。给定一个对象,其中键名为世界富豪的名字(key)、键值为对应富豪的资产(value),求排行榜(输出一个数组,其中是富豪的名字,按他们的资产从大到小排序)。例如:输入{bill:500,sam:480,roark:501},返回['roark','bill','sam']。二、思路即对资产进行从大到小排序。排序时比较对应富豪的资产三、实现function fun(obj){ let arr = Object.keys.原创 2021-10-02 15:26:06 · 203 阅读 · 0 评论 -
70、美团算法题---同类项统计
1.同类项统计给定数组['1a','2b','13c','5a'],数组元素的格式是一个数字(可能多位)前缀与一个字母的组合,输出出现次数最多的字母对应的前缀数字之和。思路:使用hash。将字母作为键; 将数组[字母出现的次数,前缀数字之和]作为键值。实现: function fun(arr){ let map = new Map(); for(let i=0;i<arr.length;i++){ let n1 = arr[i].slice(0,..原创 2021-10-02 13:20:39 · 206 阅读 · 0 评论 -
69、vue实现输入框的模糊查找
一、思路:为输入框添加@input事件,输入内容时触发响应的方法。该方法在数据库中匹配输入的内容,将匹配的数据存储到列表展示出来。1. 为输入框添加@input事件,并通过v-model绑定数据。当输入内容时,触发@input中的事件search。2. showList数组中存储了匹配到的数据,用于展示3. 用到的数据项实现的效果图:二:完整代码:<template> <div> <el-inpu...原创 2021-09-26 17:02:21 · 896 阅读 · 0 评论 -
68、对Object进行原型编程,使任意实例能够被for...of遍历
// 对Object进行原型编程 Object.prototype[Symbol.iterator] = function* () { let index = 0; let arr = Object.entries(this); let length = arr.length; while (true) { if (index >= length) { return false } else { let ke.原创 2021-09-26 13:56:56 · 609 阅读 · 0 评论 -
67、最大数(数组重排列,组成最大整数)
一、题目给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。二、思路要想组成最大的整数,一种直观的想法是把数值大的数放在高位。于是我们可以比较输入数组的每个元素的最高位,最高位相同的时候比较次高位,以此类推,完成排序,然后把它们拼接起来。这种排序方式对于输入数组 没有相同数字开头 的时候是有效的;三、实现 function largestNum(nums){原创 2021-09-23 20:36:52 · 3619 阅读 · 0 评论 -
66、基本计算器
charCodeAt:返回的是位于指定位置的字符的编码 charAt:返回的是字符子串1、 题目:给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值。2、思路过程:sign为当前遍历数字前的符号。如2-(3+4)当s[i]=2时,sign为+;当s[i]=3时,sign为-; 我们需要维护一个栈 ops,其中栈顶元素记录了当前元素s[i]所处括号前的符号。若括号前符号为-,则括号内的元素符号取反;若为+,则括号内的元素符号不变;(对于2-(3+4),所对...原创 2021-09-23 07:47:37 · 131 阅读 · 0 评论 -
66、十进制转换为M进制
一、十进制转换为二进制、八进制、十六进制将十进制转换为其它进制时比较复杂,整数部分和小数部分的算法不一样,下面我们分别讲解。1) 整数部分十进制整数转换为N进制整数采用“除N取余,逆序排列”法。具体做法是:将N作为除数,用十进制整数除以N,可以得到一个商和余数; 保留余数,用商继续除以N,又得到一个新的商和余数; 仍然保留余数,用商继续除以N,还会得到一个新的商和余数…… 如此反复进行,每次都保留余数,用商接着除以N,直到商为0时为止。 把先得到的余数作为N进制数的低位数字,后得到的原创 2021-09-03 09:17:13 · 1214 阅读 · 0 评论 -
64、最长公共子序列-II(不连续)
一、描述给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列二、最长公共子序列和最长公共子串的区别子序列:即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。 子串:给定串中任意个连续的字符组成的子序列称为该串的子串。给一个图再解释一下:子序列: {a,b,c,d,e,f,g,h},它的子序列示例: {a,c,e,f} 即元素b,d,g,h被去掉后,保原创 2021-08-31 11:04:08 · 915 阅读 · 0 评论 -
63、 接雨水问题
接雨水问题_牛客题霸_牛客网 (nowcoder.com)描述给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。实现/** * max water * @param arr int整型一维数组 the array * @return long长整型 */function maxWater( arr ) { //从两侧开始查找 let left = 0,right = arr.le..原创 2021-08-31 09:14:06 · 216 阅读 · 0 评论 -
62、买卖股票的最好时机
描述假设你有一个数组,其中第 i个元素是股票在第i天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。实现/** * * @param prices int整型一维数组 * @return int整型 */function maxProfit( prices ) { //即寻找前面元素和后面元素最大的差值 //1、计算相邻元素的差值 let p = []; for(let ..原创 2021-08-31 08:39:27 · 232 阅读 · 0 评论 -
61、二叉树根节点到叶子节点和为指定值的路径
描述给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum的路径,例如:给出如下的二叉树,sum=22,返回[[5,4,11,2],[5,8,9]]实现:function pathSum( root , sum ) { if(!root) return []; return getRes(root,sum,[],[]);}function getRes(root, sum, path, res){ if(!..原创 2021-08-30 17:45:40 · 195 阅读 · 0 评论 -
60、数组中相加和为0的三元组
描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)思路:双指针算法流程:1、特判,对于数组长度 n,如果数组为 null 或者数组长度小于 3,返回 []。2、对数组进行排序。3、遍历排序后数组:1、若 num[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 0,直接返回结果。2、对于重复元素:跳过,避免出现重复解3、令左指针 L...原创 2021-08-30 09:06:56 · 455 阅读 · 0 评论 -
59、大数加法
大数加法_牛客题霸_牛客网 (nowcoder.com)描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)实现:/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string..原创 2021-08-30 08:21:40 · 116 阅读 · 0 评论 -
58、合并两个排序的链表
描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。实现:function ListNode(x){ this.val = x; this.next = null;}function Merge(pHead1, pHead2){ //递增 if(!pHead1){ return pHead2} if(!pHead2){ return pHead1} //尾插法 let h = new.原创 2021-08-27 18:20:40 · 94 阅读 · 0 评论 -
57、 平衡二叉树
描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。注:我们约定空树是平衡二叉树。实现:/* function TreeNode(x) { this.val = x; this.left = null; this.right = .原创 2021-08-27 18:09:54 · 133 阅读 · 0 评论 -
56、二叉树的最大深度
描述求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。实现:1)方法一:递归function maxDepth( root ) { if(!root){ return 0; } return Math.max(maxDepth(root.left),maxDepth(root.right))+1;}因为递归遍历了每一个元素,所以其时间复杂度为O(N),空间复杂度为O(1)。2)方法二:非递归..原创 2021-08-27 09:39:38 · 202 阅读 · 0 评论 -
55、 重建二叉树
描述给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.0 <= pre.length <= 20002.vin.length ==pre.length3.-10000<= pre[i], vin[i] <= 100004.pre 和 vin均无重复元素5.vin出现的元素均出现在pre里...原创 2021-08-27 09:25:51 · 149 阅读 · 0 评论 -
54、 按之字形顺序打印二叉树
描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]实现:/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} */function Print(pRoot){ .原创 2021-08-27 08:26:07 · 170 阅读 · 0 评论 -
53、判断一个链表是否为回文结构
描述给定一个链表,请判断该链表是否为回文结构。1) 方法一:使用栈。时间复杂度O(n),空间复杂度O(n)function isPail( head ) { let stack = []; let p = head; while(p){ stack.push(p.val); p = p.next; } let len = stack.length for(let i=0;i<Math.floor(len原创 2021-08-25 14:34:51 · 278 阅读 · 0 评论
分享