算法
洳娅
不厉害只能笨鸟先飞
展开
-
leetcode------交替合并字符串(javascript解法)
1、题目描述给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。2、示例3、思路将字符串转化为数组,直接用while循环在两个数组都不为空的前提下使用数组的api进行操作,最后返回的时候注意会有空数组,所以要全部进行join处理。4、代码/** * @param {string} word1 * @param {string} word2原创 2021-04-07 09:33:58 · 375 阅读 · 0 评论 -
leetcode--- 数组的度(javascript解法)
一、题目描述二、示例三、解题思路我想到的是利用map来保存每个数字出现的次数 ,并且用一个变量来保存最大值,通过遍历来不断更新最大值,其实仅仅保存最大值是不够的 还需要连续数组的最小值,所以也要保存改数字的出现的第一个位置,最后一个位置,来进行连续数组的最小数组的变量的更新。最后因为是输出min的值,我们用最后一次减去第一次的下标值+1就是最后的答案!四、代码/** * @param {number[]} nums * @return {number} */var findShort原创 2021-02-20 10:45:13 · 285 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字(javascript解法)
一、题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。二、示例三、解题思路我的第一个思路是直接进行暴力的匹配 看哪个的值和下标不一致,直接输出,刚开始的时候会疏忽一个问题就是缺失最后一个的情况,所以需要给数组的最后加上任意的一个值,方便进行比较!二分法的思路进行比较可以先进行左右两边的分别比较来缩小比较的范围四、代码展示/** * @param {numbe原创 2021-02-08 17:06:37 · 198 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I的hashmap解法(JavaScript)
一、题目描述统计一个数字在排序数组中出现的次数。直达链接是https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/二、示例三、解题思路其实看到是排好序的数组的话第一个思路是二分法,但是自己对于hash比较熟悉就用了这个方法四、代码/** * @param {number[]} nums * @param {number} target * @return {number} */var原创 2021-01-07 16:22:24 · 154 阅读 · 0 评论 -
leetcode ----(剑指 Offer 57 - II. 和为s的连续正数序列)(JavaScript解法)
一、题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。二、实例三、解题思路我们可以使用滑动窗口的思路来解决,整体来用for循环整体的次数,用whie(sum>target)来控制窗口的大小四、代码/** * @param {number} target * @return {number[][]} */var findContinuousSequence = f原创 2020-12-28 15:00:08 · 216 阅读 · 2 评论 -
面试算法总结之链表篇 (javascript)
链表相关算法总结1、链表的中间节点2、相交链表3、删除链表的节点4、反转链表5、反转链表2(这里是具体的讲解与过程)6、链表的倒数第k个节点 (这里是具体的讲解)7、环形链表8、回文链表1、链表的中间节点var middleNode = function(head) { slow = fast = head; while (fast && fast.next) { slow = slow.next; fast = .原创 2020-12-23 16:22:46 · 390 阅读 · 0 评论 -
JavaScript 洗牌算法
一 突然看到洗牌算法之前没有接触过,刚好记录下来function xiPai(arr){ let rest = [] while(arr.length>0){ let random = Math.floor(Math.random()*arr.length) rest.push(arr[random]) arr.split(random,1) } return rest}...原创 2020-12-10 16:10:04 · 352 阅读 · 1 评论 -
一种思路解决二叉树的普遍问题(JavaScript)面试必看
1、先序遍历//二叉树遍历//先序遍历const preOrderTraversal = function(root){ let res = [] function traversal (root){ if(root!==null){ res.push(root.val) traversal(root.left) traversal(root.right) } } traversal(root) return res}原创 2020-12-09 16:45:00 · 303 阅读 · 0 评论 -
leetcode链表的中间节点(javascript解法)
一、题目描述给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。二、实例三、思路(1)借助外部的数组来得到n/2的值(2)遍历两次链表,第一次等到长度 n,第二次返回到n/2(3)快慢指针四、代码var middleNode = function(head) { slow = fast = head; while (fast && fast.next) { slow = slow.next原创 2020-10-30 16:23:24 · 369 阅读 · 1 评论 -
leetcode ---110平衡二叉树(JavaScript解法)
一、题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。二、示例三、解题思路主要的思路是用递归的思路,我们用返回的值的大小作为最后判断的依据,如果满足条件(左右子树高度差小于1)的话返回左右子树高度的最大值加一,否则返回-1.四、代码/** * Definition for a binary tree node. * function TreeNode(val) { * this.原创 2020-09-17 11:19:43 · 294 阅读 · 0 评论 -
leetcode ---160相交链表(JavaScript解法)
一、题目描述二、示例三、解题思路有一种思路就是用双指针,我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。这样,当它们相遇时,所指向的结点就是第一个公共结点。也就是两次轮换使得距离最后一位的距离相等。/** * Definition for singly-原创 2020-09-17 11:13:26 · 224 阅读 · 0 评论 -
leetcode --两数相加(javascript解法)
一、给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。二、例子三、思路四、代码/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.n原创 2020-09-02 16:28:35 · 454 阅读 · 0 评论 -
leetcode-------不同路径(JavaScript解法)
一、题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?二、示例三、解题思路这个题目我选择用动态规划,这个的动态方程也比较简单,从最后一个入手开始,只能从上或者左边走的话,就可以是上和左的和,一次类推遍历循环。这里要注意的是第一行和第一列要进行初始化dp[i][0] = 1,dp[0][j] = 1.四、代码/** *原创 2020-08-27 15:15:21 · 264 阅读 · 0 评论 -
promise处理并发请求
asyncPool=(poolLimit, array, iteratorFn)=> { let i = 0; const ret = []; const executing = [] const enqueue = function () { // 边界处理,array为空数组 if (i === array.length) { return Promise.resolve(); } ...原创 2020-08-25 15:11:16 · 2256 阅读 · 0 评论 -
leetcode------剑指 Offer 18. 删除链表的节点(javascript解法----链表)
一、题目描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。二、示例三、思路拿到这个链表的问题我的第一眼就是去看可以快慢指针还是循环遍历,这个题目比较简单就用了遍历while中进行判断,符合条件的跳过,这里注意要break,不然会死循环,最后返回头指针就可。四、代码/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val;原创 2020-07-10 10:23:22 · 379 阅读 · 0 评论 -
leetcode -------面试题 16.11. 跳水板(JavaScript解法---数学思路)
一、题目描述你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。二、示例三、解题思路这里需要注意的是临界情况,当k===0的时候,return 空数组,还有当short和long相等的时候,只有一种可能,所以我们返回任意一个长度乘以k,那么剩下的我们用一个循环来依次进行遍历累加,push到新的数组进行return。四、代码/**原创 2020-07-08 10:36:39 · 182 阅读 · 0 评论 -
leetcode----路径总和(二叉树|javascript解法)
一、题目描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。二、示例三、思路二叉树的方法的话我一般使用的是递归的方法,每次经过一个就进行减去当前值的操作,当在叶子节点时看sum是否等于0,返回ture。四、代码/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; *原创 2020-07-07 11:31:28 · 587 阅读 · 0 评论 -
leetcodde------反转链表2(javascript解法)
一、题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。二、示例三、解题思路四、代码/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @param {number} m * @param {number} n *原创 2020-07-07 11:17:55 · 175 阅读 · 0 评论 -
leetcode----378. 有序矩阵中第K小的元素(javascript的暴力解法与二分解法详解)
一、题目描述给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。二、示例三、解题思路第一种思路是我们可以直接暴力求解,将二维数组展平,再去寻找第K个元素第二种思路我们可以使用二分法来达到目的:a、确定值的范围是在数组的matrix[0][0]到matrix[n-1][n-1]之间,b、再去找到中间值,并且算出该数组中比当前值小的个数countc、将count与k比较,如果count比k小原创 2020-07-02 15:42:05 · 177 阅读 · 0 评论 -
leetcode---718. 最长重复子数组(JavaScript解法)---动态规划
一、题目描述给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。二、示例三、思路讲解由题目分析,我们可以先看最后两个数组的最后一个数,如果相同的话,再看前一个 如果符合的话 加上自身相同的1,所以最后的结果和之前的子结果是相关的。就可以写出dp方程,dp[i][j] = dp[i-1][j-1]+1,开始时先对数组进行一个初始化。为了优化我们可以将二维数组换成一维数组,方程就变为四 、代码/** * @param {number[]} A * @param {num原创 2020-07-01 11:22:25 · 453 阅读 · 0 评论 -
leetcode---长度最小的数组(JavaScript解法----滑动窗口)
一、题目描述给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。二、示例三、思路分析这个题目我们拿到之后分析,他要一个连续的区间,是一个典型的双指针问题,我们使用快慢指针以及两层循环实现。连续子数组可以表示为 [i,j]:从第 i 项到第 j 项如果 [i,j] 的 sum >= s ,如果扩张窗口,条件依然满足,但更背离“最小长度”的要求所以选择收缩窗口,i 右移,直到条件不原创 2020-06-29 11:19:34 · 587 阅读 · 0 评论 -
Leetcode--缺失的最小的数(JavaScript解法)
一、题目描述给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。二、示例三、解题思路其实刚开始的时候的思路也是有的,比如新建一个哈希表来处理,或者说我们先进行排序再使用二分法的方式来进行查找,但是题目要求的是空间复杂度为o(1),所以我们可以在原来的数组上使用哈希,其实哈希的本质就是数组,我们不过是使用它不添加额外的空间。具体的思路是这样的:我们可以将每个值放在第i-1位置上,比如1放在0上,2放在1上这样的思路,先进行遍历,依次判断进行交换,交换的条件就是:值在0-len范围内原创 2020-06-28 11:36:37 · 492 阅读 · 0 评论 -
Leetcode ----无重复字符的最长子串(JavaScript解法)
一、题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。二、示例三、解题思路使用类似滑动窗口的思路来解决,借助一个空数组,当下一个字符没有在新声明的数组中时 就入数组,如果有的话就使用数组的splice函数对原数组进行切割,切掉该索引之前的数,从当前开始。一次判断,使用循环,计算max就是arr的length。四、代码```javascript/** *...原创 2020-05-02 09:36:29 · 337 阅读 · 0 评论 -
LeetCode----- 钥匙和房间(javascript解法)
一、题目描述二、示例三、解题思路我们先要确定这个实体(钥匙,口袋)的数据结构,因为钥匙用过一次之后就会插在门上,在下一次进入房间后不会把开过的钥匙再装在兜里,所以我们用队列来表示钥匙队列,然后将开过门的钥匙存在一个数组里面,每次将钥匙装入兜之前进行判断。四、代码var canVisitAllRooms = function(arr) { var keyQueue = [] ...原创 2020-04-06 16:24:28 · 256 阅读 · 0 评论 -
力扣 -----最小绝对值(JavaScript解法)
一、题目描述二、示例三、解题思路先进行一个排序,然后使用双指针,依次进行比较,将比较的值进行存储,最小值改变的话,数组置空,最小值改变,如果和最小值相等的话直接push。我刚开始写的排序是四、代码/** * @param {number[]} arr * @return {number[][]} */var minimumAbsDifference = function(ar...原创 2020-04-03 12:30:30 · 481 阅读 · 0 评论 -
LeetCode ----罗马数字转整数(JavaScript解法)
一、题目描述二、示例三、解题思路用一个map将键值对进行一个保存,然后用一个for 循环进行遍历,如果不是最后一个就进行两个同时操作,i+=2,如果是最后一个就i++,将加的值保存在ans里面。四、代码/** * @param {string} s * @return {number} */var romanToInt = function(s) { const ma...原创 2020-03-26 10:53:36 · 238 阅读 · 0 评论 -
LeetCode ----车的可捕获量(JavaScript解法)
一、题目描述#### 二、实例三、解题思路我们可以用两层循环来对它进行遍历,当遇到R时记录它的横纵坐标 再对四个方向依次进行一个遍历,当遇到B时直接break,当遇到p时num++,再break。四、代码/** * @param {character[][]} board * @return {number} */var numRookCaptures = function(b...原创 2020-03-26 09:57:54 · 165 阅读 · 0 评论 -
字节跳动前端一面面经(带答案)
一、前言 面试之前孩还在忙着些业务,感觉复习的有点不扎实,从js到ES6到网络、vue、webpack,但是面试过程中更加在意的就是基础的知识的理解与掌握。二、具体题目1、说说你一般的代码规范(我的实习简历上写了,写代码时注重代码规范,就比较挖坑,说了说eslint的一些规则以及命名规范)2、移动端适配的1px问题有遇到过吗,大概讲讲怎么解决的(1)我们要先了解像素、分辨率的概念,我...原创 2020-03-23 21:49:22 · 3196 阅读 · 1 评论 -
leetcode -----面试题 01.06. 字符串压缩(javascript解法)
一、题目描述字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。二、示例示例1:输入:“aabcccccaaa”输出:“a2b1c5a3”示例2:输入:“abbccd”输出:“abbccd”解释...原创 2020-03-16 09:20:05 · 302 阅读 · 1 评论 -
leetcode----岛屿的最大面积(JavaScript解法)
一、题目描述给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)二、示例示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0...原创 2020-03-15 10:27:26 · 392 阅读 · 0 评论 -
LeetCode 二叉树的直径(javascript解法)
一、题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。二、示例 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。三、代码与思路/** * Definition for a binary...原创 2020-03-10 17:13:25 · 348 阅读 · 0 评论 -
面试题50. 第一个只出现一次的字符(JavaScript实现)----------在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。
一、题目描述在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。二、实例s = “abaccdeff”返回 “b”s = “”返回 " "三、思路使用map数据结构,key为字符,value为次数,先用循环放进去,再用循环依次判断value== 1 的字符,并输出四、代码/** * @param {string} s * @return {charac...原创 2020-03-10 12:45:26 · 738 阅读 · 0 评论 -
面试题64. 求1+2+…+n(JavaScript)---求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
一、题目描述求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。二、示例输入: n = 3输出: 6三、解题思路因为不可以使用具体的运算,我就使用&&运算符,A&&B,当A符合条件的话,执行B。四、代码/** * @param {number} n * @r...原创 2020-03-09 10:57:26 · 232 阅读 · 0 评论 -
面试题42. 连续子数组的最大和-------输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
一、题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。二、示例输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。三、解题思路设置两个变量来保存当前值和最大值,用currentnum的正负来控制子序列,...原创 2020-03-09 10:45:29 · 1448 阅读 · 0 评论 -
面试题22. 链表中倒数第k个节点(JavaScript解法)-----输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
一、题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。二、示例给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.三、解题思路使用...原创 2020-03-09 10:16:30 · 1120 阅读 · 0 评论 -
力扣 122 买卖彩票的最佳时机2(JavaScript解法)-----给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。
一、题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。二、示例输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, ...原创 2020-03-09 09:50:46 · 958 阅读 · 1 评论 -
力扣 121---买卖股票的最佳时机 (JavaScript解法)
一、题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。二、示例输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。...原创 2020-03-09 09:42:52 · 198 阅读 · 0 评论 -
基础算法总结(排序,递归,二叉树----(时间复杂度很重要!!!!!))时时更新
一、排序1、冒泡排序两层循环,外层控制趟数,内层两两比价function sort(arr){var len = arr.length;for(let i = len-1; i >= 2 ; i--){ for(let j = 0 ; j < len; j++){ if(arr[j]>arr[j+1]){ let temp = arr[j] arr...原创 2020-03-05 16:54:54 · 959 阅读 · 0 评论 -
顺时针打印二维数组
function printMatrix(matrix) { if (matrix == null || matrix.length == 0) { return; } var rows = matrix.length; var cols = matrix[0].length; var start = 0; var result = ...原创 2020-03-05 08:49:45 · 156 阅读 · 0 评论 -
Leetcode 旋转图像-给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针旋转 90 度。(JavaScript)
一、题目描述给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。二、JavaScript建议做法使用reserve()函数,得到的数组对角线方向正确,只需要两两交换对角线对称的元素就好,相当于max[i][j] = max[j][i],使用一个临时变量来保存就好。三...原创 2020-01-16 14:31:36 · 839 阅读 · 0 评论