leetcode
webRambler
努力,专注,知行合一!stay hungry,stay foolish!
展开
-
JavaScript快速排序
定义快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序 n 个项目要 O(nlogn) 次比较。在最坏状况下则需要 O(n^2) 次比较,但这种状况并不常见。事实上,快速排序 (nlogn) 通常明显比其他算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地达成。算法逻辑思想快速排序使用分治法(Divide and conquer)策略来把一个序列(lis原创 2021-12-18 20:04:01 · 115 阅读 · 0 评论 -
JavaScript归并排序
定义归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。算法逻辑思想采用分治法:分割:递归地把当前序列平均分割成两半。集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。归并操作归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操原创 2021-12-18 19:16:09 · 237 阅读 · 0 评论 -
JavaScript算法系列--leetcode合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 = [], l2 = [] 输出:[]示例 3: 输入:l1 = [], l2 = [0] 输出:[0]首先先给出链表节点ListNode的节点定义,如下:/** * Definition for singly-linked list.原创 2021-05-24 11:30:04 · 112 阅读 · 0 评论 -
JavaScript算法系列--leetcode搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1: 输入: [1,3,5,6], 5 输出: 2示例2: 输入: [1,3,5,6], 2 输出: 1示例 3: 输入: [1,3,5,6], 7 输出: 4示例 4: 输入: [1,3,5,6], 0 输出: 0方法一:(当初没看到条件是排序数组,想复杂了) /** * @param {nu原创 2021-05-24 11:19:37 · 79 阅读 · 0 评论 -
JavaScript算法系列--leetcode移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝int l原创 2021-05-20 18:13:14 · 79 阅读 · 0 评论 -
JavaScript算法系列--leetcode整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况原创 2021-05-20 17:21:31 · 113 阅读 · 0 评论 -
JavaScript算法系列--leetcode罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边.原创 2021-05-17 16:33:51 · 107 阅读 · 0 评论 -
JavaScript算法系列--无连续重复字符的最长子串
给定一个字符串,请你找出其中不含有连续重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 7解释: 因为无连续重复字符的最长子串是 "abcabcb",所以其长度为 7。示例 2:输入: "bbbbb"输出: 1解释: 因为无连续重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "sdfffffsdee"输出: 4解释:...原创 2019-11-01 17:47:19 · 382 阅读 · 0 评论 -
JavaScript算法系列--leetcode最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。话不多说,上code:/** * ...原创 2019-11-01 21:30:08 · 275 阅读 · 0 评论 -
JavaScript算法系列--leetcode两数之和
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法一:时...原创 2019-11-08 20:47:44 · 132 阅读 · 0 评论 -
JavaScript算法系列--leetcode字符串转整数(atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...原创 2019-11-18 10:59:50 · 138 阅读 · 0 评论 -
JavaScript算法系列--leetcode删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1,2。 你不需要考虑数组中超出新长度后面的元素。示例2:...原创 2019-11-19 19:45:38 · 124 阅读 · 0 评论 -
JavaScript算法系列--leetcode反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是ASCII码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:...原创 2019-11-19 20:05:40 · 212 阅读 · 0 评论 -
JavaScript算法系列--leetcode有效的括号
给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示...原创 2019-11-21 09:51:14 · 228 阅读 · 0 评论 -
JavaScript算法系列--leetcode合并两个有序数组
给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存nums2中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 ...原创 2019-11-25 09:23:58 · 197 阅读 · 0 评论 -
JavaScript算法系列--leetcode反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc"注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。解法: /** * @param {string} s...原创 2019-11-27 19:43:19 · 172 阅读 · 0 评论 -
JavaScript算法系列--leetcode字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。 num1和num...原创 2019-12-03 10:22:18 · 302 阅读 · 0 评论 -
JavaScript算法系列--leetcode最接近的三数之和
给定一个包括n个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).解法如下: /** ...原创 2019-12-03 17:00:44 · 237 阅读 · 0 评论 -
JavaScript算法系列--leetcode盛最多水的容器
给定n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(...原创 2019-12-04 10:32:56 · 172 阅读 · 0 评论 -
JavaScript算法系列--leetcode螺旋矩阵
给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输...原创 2019-12-06 17:56:24 · 289 阅读 · 0 评论 -
JavaScript算法系列--leetcode螺旋矩阵Ⅱ
给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]解法如下: /** * @param {number} n * @return {number[][]} */ var generateMatr...原创 2019-12-10 19:44:07 · 217 阅读 · 0 评论 -
JavaScript算法系列--leetcode除自身以外数组的乘积
给定长度为n的整数数组nums,其中n> 1,返回输出数组output,其中output[i]等于nums中除nums[i]之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明:请不要使用除法,且在O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的...原创 2019-12-20 10:43:14 · 200 阅读 · 0 评论 -
JavaScript算法系列--leetcode爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. ...原创 2019-12-20 10:46:21 · 219 阅读 · 0 评论 -
JavaScript算法系列--leetcode最大子序和
给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。实现方案如下: /** * @param {nu...原创 2020-03-09 18:02:09 · 162 阅读 · 0 评论 -
JavaScript算法系列--leetcode整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。实现如...原创 2020-03-09 18:12:54 · 118 阅读 · 0 评论 -
JavaScript算法系列--leetcode 2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例1:输入: 1输出: true解释: 20= 1示例 2:输入: 16输出: true解释: 24= 16示例 3:输入: 218输出: false实现如下: /** * @param {number} n * @return {boolean} */ ...原创 2020-03-09 18:18:32 · 142 阅读 · 0 评论 -
JavaScript算法系列--leetcode只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4实现如下: /** * @param {number[]} nums * ...原创 2020-03-09 18:20:45 · 175 阅读 · 0 评论 -
JavaScript算法系列--leetcode多数元素
给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2实现如下: /** * @param {number[]} nums * ...原创 2020-03-09 19:34:35 · 257 阅读 · 0 评论 -
JavaScript算法系列--leetcode最长回文子串
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"实现如下: /** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { if (!s.length) return...原创 2020-05-21 16:29:34 · 208 阅读 · 0 评论 -
JavaScript算法系列--leetcode两数相加(链表)
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解法如下: /** * @param {Lis...原创 2020-06-28 15:45:12 · 830 阅读 · 0 评论