![](https://img-blog.csdnimg.cn/20200814095217180.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LintCode
文章平均质量分 81
LintCode的JavaScript刷题专栏
SmallTeddy
('b' + 'a' + + 'a' + 'a').toLowerCase()
展开
-
JavaScript前端面试常考算法模板
端面试中,算法是一个重要的考察点。而在算法中,有一些常见的模板可以帮助我们更好地解决问题。原创 2023-04-18 23:56:23 · 636 阅读 · 0 评论 -
数据结构和算法之双指针算法
1、什么是双指针双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。2、快慢指针1、说明快慢指针也是双指针,但是两个指针从同一侧开始遍历数组,将这两个指针分别定义为快指针(fast)和慢指针(slow),两个指针以不同的策略移动,直到两个指针的值相等(或其他特殊条件)为止,如fast每次增长两个,slow每次增长一个原创 2022-05-07 11:59:13 · 1025 阅读 · 1 评论 -
力扣双指针的一些探索
剑指 Offer 58 - II. 左旋转字符串题目地址https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/题目描述字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。// 示例 1:输入: s = "abcdefg", k = 2输出: "cdefgab"//原创 2022-05-01 21:18:01 · 782 阅读 · 0 评论 -
算法题中常用的JavaScript方法笔记(持续更新)
一、数字类型1、数字类型转字符串类型1.1 加号let num = 11;num+'' // '11'1.2 toString()方法let num = 11;num.toString() // '11'1.3 String()方法let num = 11;String(num) // '11'2 数字类型转布尔类型let num = 11;!!num // true!num // false注意当num原创 2021-05-12 09:12:26 · 1924 阅读 · 6 评论 -
JavaScript中,一行代码对数组能做什么?(持续更新)
1、添加元素1.1 从后添加,push方法let arr = [1, 2, 3];arr.push(4); // [1, 2, 3, 4]1.1 从前添加,unShift方法1、扁平化1.1 flat方法flat()方法创建一个新数组,传入Infinity参数,所有子数组元素都以递归方式连接到该数组中,直到达到指定的深度为止。const arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, [ 10, 11, 12, [ 13原创 2021-04-14 15:19:06 · 1417 阅读 · 1 评论 -
算法题中常用的JS数据处理方式
1、数字转字符串console.log(String(11)) // "11"console.log(11.toString()) // "11"2、进制转化// 转成k进制hexConversion=(n,k)=>n.toString(k)hexConversion=(11,2) // "1011"// 有时会出现科学计数法,所以要做进一步数据处理hexConversion(30,16) // "1e"hexConversion=(n,k)=>n.t原创 2020-08-06 10:04:09 · 2923 阅读 · 0 评论 -
二叉树的前序、中序和后序遍历
1、二叉树二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。2、定义二原创 2020-09-22 16:02:51 · 3680 阅读 · 0 评论 -
LintCode 入门题解析 JavaScript算法
首先打开领扣的官网:领扣然后我们来看看入门的前端题都有哪些:注意:函数名称是定义好的,我们直接写处理函数就可以。题目:反转一个3位整数解析:反转一个三位的整数,第一我想到的是把它变成字符串,然后在反转字符串,最后转回数字,其中反转字符串就要先把字符串分割,在进行反转,代码如下:/** * @param number: A 3-digit number. * @return: Reversed number. */const reverseInteger = function原创 2020-06-10 20:54:50 · 2952 阅读 · 5 评论 -
LintCode前十题中JavaScript的题目解析
领扣官网打对号的为JS可以做的题目,其他的只能用C、C++、Java或Python等后端语言去写。1、A + B 问题当两个数不同时,a + b = (a ^ 2 - b ^ 2)/(a - b);当两个数相同时,a + b = 2 * a 或者 2 * b;const aplusb = function (a, b) { if(a === b) return 2 * a else return (Math.pow(a,2)-Math.pow(b,2)) / (a-b)}原创 2020-08-03 14:58:20 · 2524 阅读 · 0 评论 -
LintCode 1. A + B 问题 JavaScript算法
描述给出两个整数 aa 和 bb , 求他们的和。说明a和b都是 32位 整数么?是的我可以使用位运算符么?当然可以样例- 样例 1:输入: a = 1, b = 2输出: 3 样例解释: 返回a+b的结果.- 样例 2:输入: a = -1, b = 1输出: 0 样例解释: 返回a+b的结果.挑战显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)解析当两个数不同时,a + b = (a ^ 2原创 2020-08-17 15:26:24 · 3041 阅读 · 0 评论 -
LintCode 2. 尾部的零 JavaScript算法
描述设计一个算法,计算出n阶乘中尾部零的个数样例- 样例 1: 输入: 11 输出: 2 样例解释: 11! = 39916800, 结尾的0有2个。- 样例 2: 输入: 5 输出: 1 样例解释: 5! = 120, 结尾的0有1个。挑战O(logN)的时间复杂度解析既然他让求多少个零, 那么, 在什么情况下能够得到 0 呢?当然, 出现 5 的倍数的情况下, 不就会出现一个 0 吗? (5 x 2 = 10)那么出现 5^2 的时候, 将会出现原创 2020-08-17 15:37:23 · 2823 阅读 · 0 评论 -
LintCode 3. 统计数字 JavaScript算法
描述计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值。样例- 样例 1:输入:k = 1, n = 1输出:1解释:在 [0, 1] 中,我们发现 1 出现了 1 次 (1)。- 样例 2:输入:k = 1, n = 12输出:5解释:在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 中,我们发现 1 出现了 5 次 (1, 10, 11, 12)(注意11中有两个1)。解析提供三种解决方法,这里只分析原创 2020-08-17 15:43:40 · 2513 阅读 · 0 评论 -
LintCode 4. 丑数 II JavaScript算法
描述设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12…说明我们可以认为 1 也是一个丑数。样例- 样例 1:输入:9输出:10- 样例 2:输入:1输出:1挑战要求时间复杂度为 O(nlogn) 或者 O(n)。解析这里百度了一下什么叫丑数:说法一(ugly number):把只包含质因子2,3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但7、14不是,因为它们包原创 2020-08-21 14:17:20 · 2384 阅读 · 0 评论 -
LintCode 5. 第k大元素 JavaScript算法
描述在数组中找到第 k 大的元素。说明你可以交换数组中的元素的位置样例- 样例 1:输入:n = 1, nums = [1,3,4,2]输出:4- 样例 2:输入:n = 3, nums = [9,3,2,4,8]输出:4挑战要求时间复杂度为O(n),空间复杂度为O(1)。解析代码很简短,但不是最优的解法,运行时间比最快的差了3倍const kthLargestElement = function (n, nums) { return nums.sort((原创 2020-08-21 14:22:26 · 2408 阅读 · 0 评论 -
LintCode 6. 合并排序数组 II JavaScript算法
描述合并两个有序升序的整数数组A和B变成一个新的数组。新数组也要有序。样例- 样例 1:- 输入: A=[1], B=[1]输出:[1,1] 样例解释: 返回合并后的数组。- 样例 2:输入: A=[1,2,3,4], B=[2,4,5,6]输出: [1,2,2,3,4,4,5,6] 样例解释: 返回合并后的数组。挑战你能否优化你的算法,如果其中一个数组很大而另一个数组很小?解析合并数组并直接进行快速sort排序mergeSortedArray=(A,B)=>A.原创 2020-08-21 14:27:06 · 2441 阅读 · 0 评论 -
LintCode 8. 旋转字符串 Java算法
描述给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。说明原地旋转意味着你要在s本身进行修改。你不需要返回任何东西。样例- 样例 1:输入: str="abcdefg", offset = 3输出: str = "efgabcd" 样例解释: 注意是原地旋转,即str旋转后为"efgabcd"- 样例 2:输入: str="abcdefg", offset = 0输出: str = "abcdefg" 样例解释: 注意是原地旋转原创 2020-08-21 14:34:57 · 2801 阅读 · 0 评论 -
LintCode 9. Fizz Buzz 问题 JavaScript算法
描述给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizz buzz.如果这个数既不能被 3 整除也不能被 5 整除,打印数字本身。样例比如 n = 15, 返回一个字符串数组:[ "1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz", "buzz", "11", "fizz", "13", "原创 2020-08-21 14:43:33 · 2988 阅读 · 0 评论 -
LintCode 14. 二分查找 JavaScript算法
描述给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。样例- 样例 1: 输入:[1,4,4,5,7,7,8,9,9,10],1 输出: 0 样例解释: 第一次出现在第0个位置。- 样例 2: 输入: [1, 2, 3, 3, 4, 5, 10],3 输出: 2 样例解释: 第一次出现在第2个位置 - 样例 3: 输入: [1, 2, 3, 3,原创 2020-08-14 11:28:35 · 2816 阅读 · 0 评论 -
LintCode 17. 子集 JavaScript算法
描述给定一个含不同整数的集合,返回其所有的子集。说明子集中的元素排列必须是非降序的,解集必须不包含重复的子集。样例- 样例 1:输入:[0]输出:[ [], [0]]- 样例 2:输入:[1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]挑战你可以同时用递归与非递归的方式解决么?解析这里LintCode平台有bug,有一组数据测试不通过,所以我是用Java提原创 2020-08-21 14:52:33 · 2848 阅读 · 0 评论 -
LintCode 20. 骰子求和 Python3算法
描述扔 n 个骰子,向上面的数字之和为 S。给定 n,请列出所有可能的 S 值及其相应的概率。说明你不需要关心结果的准确性,我们会帮你输出结果。样例- 样例 1:输入:n = 1输出:[[1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]解释:掷一次骰子,向上的数字和可能为1,2,3,4,5,6,出现的概率均为 0.17。- 样例 2:输入:n = 2输出:[[2,0.03],[3,0.06],[4,0原创 2020-08-21 14:57:03 · 2879 阅读 · 0 评论 -
LintCode 29. 交叉字符串 JavaScript算法
描述给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。样例- 样例 1:输入:"aabcc""dbbca""aadbbcbcac"输出:true- 样例 2:输入:"""""1"输出:false- 样例 3:输入:"aabcc""dbbca""aadbbbaccc"输出:false挑战要求时间复杂度为O(n2)或者更好代码isInterleave = function (s1, s2, s3) { if (s1.lengt原创 2020-08-21 15:03:54 · 2861 阅读 · 0 评论 -
LintCode 31. 数组划分 JavaScript算法
描述给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:所有小于k的元素移到左边所有大于等于k的元素移到右边返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。说明你应该真正的划分数组 nums,而不仅仅只是计算比 k 小的整数数,如果数组 nums 中的所有元素都比 k 小,则返回 nums.length。样例- 例1:输入:[],9输出:0- 例2:输入:[3,2,2,1],2输出:1解释:真实的原创 2020-08-21 15:08:00 · 2592 阅读 · 0 评论 -
LintCode 34. N皇后问题 II JavaScript算法
描述根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局。样例- 例1:输入: n=1输出: 1解释:1:1- 例2:输入: n=4输出: 2解释:1:0 0 1 01 0 0 00 0 0 10 1 0 02:0 1 0 0 0 0 0 11 0 0 00 0 1 0解析采用了lintcode上华助教的方法,dfs暴力搜索N皇后属于算法经典问题了可以在leetcode上找到很多解法有兴趣的话可以搜索看看const total原创 2020-08-26 09:58:34 · 2636 阅读 · 0 评论 -
LintCode 37. 反转一个3位整数 JavaScript算法
描述反转一个只有3位数的整数。说明你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000。样例- 样例 1:输入: number = 123输出: 321- 样例 2:输入: number = 900输出: 9解析作为一道入门难度的题,真的很简单,主要就是对数据的转化和处理首先给定的是数字类型,要使用reverse就要将它分割,分割只能分割字符串所以先转化成字符串类型,分割成数组,进行reverse操作反转后用join变回字符串,再用Number原创 2020-08-26 10:02:37 · 2704 阅读 · 0 评论 -
LintCode 39. 恢复旋转排序数组 JavaScript算法
描述给定一个旋转排序数组,在原地恢复其排序。(升序)说明什么是旋转数组?比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]样例- Example1:[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]- Example2:[6,8,9,1,2] -> [1,2,6,8,9]分析其实看下来,就是把数组进行一下冒泡排序,这里直接采用sort方法const recover原创 2020-08-17 15:20:25 · 2763 阅读 · 0 评论 -
LintCode 41. 最大子数组 JavaScript算法
描述给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。说明子数组最少包含一个数样例- 样例1:输入:[−2,2,−3,4,−1,2,1,−5,3]输出:6解释:符合要求的子数组为[4,−1,2,1],其最大和为 6。- 样例2:输入:[1,2,3,4]输出:10解释:符合要求的子数组为[1,2,3,4],其最大和为 10。挑战要求时间复杂度为O(n)解析const maxSubArray = function (nums) { if (nums ==原创 2020-09-22 09:36:17 · 2423 阅读 · 0 评论 -
LintCode 42. 最大子数组 II Java算法
描述给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的和。说明子数组最少包含一个数样例- 例1:输入:[1, 3, -1, 2, -1, 2]输出:7解释:最大的子数组为 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2].- 例2:输入:[5,4]输出:9解释:最大的子数组为 [5] 和 [4].挑战要求时间复杂度为 O(n)解析public class Solu原创 2020-08-26 10:08:31 · 2572 阅读 · 0 评论 -
LintCode 47. 主元素 II Python算法
描述给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。说明数组中只有唯一的主元素样例- 例1:输入: [99,2,99,2,99,3,3], 输出: 99.- 例2:输入: [1, 2, 1, 2, 1, 3, 3], 输出: 1.挑战要求时间复杂度为O(n),空间复杂度为O(1)。解析class Solution: """ @param: nums: a list of integers @return: The原创 2020-08-26 10:11:29 · 2706 阅读 · 0 评论 -
LintCode 48. 主元素 III JavaScript算法
描述给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。说明数组中只有唯一的主元素样例- 例1:输入: [3,1,2,3,2,3,3,4,4,4] and k=3, 输出: 3.- 例2:输入: [1,1,2] and k=3, 输出: 1.挑战要求时间复杂度为O(n),空间复杂度为O(k)解析const majorityNumber = function (nums, k) { k = nums.length * (1 / k)原创 2020-08-26 10:14:30 · 2550 阅读 · 0 评论 -
LintCode 49. 字符大小写排序 Java算法
描述给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。说明小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置。样例- 样例 1: 输入: "abAcD" 输出: "acbAD"- 样例 2: 输入: "ABC" 输出: "ABC"挑战在原地扫描一遍完成解析public class Solution { public void sortLetters(char[] chars) { int i = 0, j = ch原创 2020-08-26 10:18:29 · 2732 阅读 · 0 评论 -
Lintcode 53. 翻转字符串中的单词 JavaScript算法
描述给定一个字符串,逐个翻转字符串中的每个单词。说明单词的构成:无空格字母构成一个单词,有些单词末尾会带有标点符号-输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个样例- 样例 1: 输入: "the sky is blue" 输出: "blue is sky the" 样例解释: 返回逐字反转的字符串.- 样例 2: 输入: "hello world" 输出: "worl原创 2020-08-14 09:59:55 · 2541 阅读 · 0 评论 -
LintCode 55. 比较字符串 JavaScript算法
描述比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母说明在 A 中出现的 B 字符串里的字符不需要连续或者有序。样例给出 A = "ABCD" B = "ACD",返回 true给出 A = "ABCD" B = "AABC", 返回 false首先分割字符串为数组,设定voild为判定值,做一步for循环,通过indexOf方法查找元素,最后返回voild即可。compareStrings = function (A, B) { A =原创 2020-08-14 10:05:00 · 2658 阅读 · 0 评论 -
LintCode 56. 两数之和 JavaScript算法
描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。说明你可以假设只有一组答案。样例Example1:给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].Example2:给出 numbers = [15, 2, 7, 11], target = 9, 返回 [1, 2].本解法通过pop函数截原创 2020-08-14 10:09:54 · 2634 阅读 · 0 评论 -
LintCode 57. 三数之和 Python算法
描述给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。说明在三元组(a, b, c),要求a <= b <= c。结果不能包含重复的三元组。样例- 例1:输入:[2,7,11,15]输出:[]- 例2:输入:[-1,0,1,2,-1,-4]输出:[[-1, 0, 1],[-1, -1, 2]]解析class Solution: def threeSum(self, nums):原创 2020-08-26 10:21:50 · 2809 阅读 · 0 评论 -
LintCode 60. 搜索插入位置 JavaScript算法
描述给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。说明你可以假设在数组中无重复元素。样例[1,3,5,6],5 → 2[1,3,5,6],2 → 1[1,3,5,6], 7 → 4[1,3,5,6],0 → 0const searchInsert = function (A, target) { res = 0 if(A.length === 0 || A[0] > target) res = 0原创 2020-08-14 10:17:24 · 2555 阅读 · 0 评论 -
LintCode 80.中位数 JavaScript算法
描述给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。说明数组大小不超过10000样例- 样例 1:输入:[4, 5, 1, 2, 3]输出:3解释:经过排序,得到数组[1,2,3,4,5],中间数字为3- 样例 2:输入:[7, 9, 4, 5]输出:5解释:经过排序,得到数组[4,5,7,9],第二个(4/2)数字为5首先用sort函数对数组快速排序,然后除余判断数组length是奇数还是偶原创 2020-08-14 10:27:01 · 2525 阅读 · 0 评论 -
LintCode 82. 落单的数I JavaScript算法
描述给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。说明n≤100样例- 样例 1:输入:[1,1,2,2,3,4,4]输出:3解释:仅3出现一次- 样例 2:输入:[0,0,1]输出:1解释:仅1出现一次先用sort进行排序,一次for循环,判断这个数与左右是否相等,不相等直接输出这个数const singleNumber = function (A) { A = A.sort() for(i=0; i<A.原创 2020-08-14 10:48:23 · 2616 阅读 · 0 评论 -
LintCode 83. 落单的数 II JavaScript算法
描述给出3*n + 1 个非负整数,除其中一个数字之外其他每个数字均出现三次,找到这个数字。说明n≤100样例- 样例 1:输入: [1,1,2,3,3,3,2,2,4,1]输出: 4- 样例 2:输入: [2,1,2,2]输出: 1 先用sort进行排序,一次for循环,判断这个数与左右是否相等,不相等直接输出这个数const singleNumber = function (A) { A = A.sort() for(i=0; i<A.leng原创 2020-08-14 10:52:53 · 3344 阅读 · 0 评论 -
LintCode 89. K数之和 JavaScript算法
描述给定 n 个不同的正整数,整数 k(k <= n)以及一个目标数字 target。 在这 n 个数里面找出 k 个数,使得这 k 个数的和等于目标数字,求问有多少种方案?样例- 样例1输入:List = [1,2,3,4]k = 2target = 5输出: 2说明: 1 + 4 = 2 + 3 = 5样例2- 输入:- List = [1,2,3,4,5]k = 3target = 6输出: 1说明: 只有这一种方案。 1 + 2 + 3 = 6解析原创 2020-08-26 10:24:22 · 2532 阅读 · 0 评论 -
LintCode 92. 背包问题 JavaScript算法
描述在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]说明你不可以将物品进行切割。样例- 样例 1: 输入: [3,4,8,5], backpack size=10 输出: 9- 样例 2: 输入: [2,3,5,7], backpack size=12 输出: 12挑战O(n x m) 的时间复杂度 and O(m) 空间复杂度如果不知道如何优化空间O(n x m) 的空间复杂度也可以通过.解析背包问题也是前端算法的经典问原创 2020-08-26 10:30:19 · 2534 阅读 · 0 评论