Leetcode解题记录
Leetcode解题的思路和代码实现
soxiuzi
这个作者很懒,什么都没留下…
展开
-
Leetcode答题 --- 只出现一次的数字
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例输入: [2,2,1]输出: 1思路方法一:通过判断数组中的元素indexOf和lastIndexOf相同,则该元素为唯一一个方法二:异或运算(方法来自题解)1、0和任何数做异或运算等于任何数 0 ^ n = n2、任何数和其自身做异或运算等于0 n ^ n = 0实现方法一var singleNumber = function(nums) { return nu原创 2020-07-07 11:18:36 · 217 阅读 · 0 评论 -
Leetcode答题 --- 按奇偶排序数组
题目给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。思路分别过滤出奇数组成的数组和偶数数组的数组,再通过concat合并实现var sortArrayByParity = function(A) { return A.filter(item => item原创 2020-07-07 11:18:05 · 258 阅读 · 0 评论 -
Leetcode答题 --- 独一无二的出现次数
题目给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-number-of-occurrences思路先将整数数组去原创 2020-07-07 11:17:27 · 710 阅读 · 0 评论 -
Leetcode答题 --- 键盘行
题目给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。示例输入: ["Hello", "Alaska", "Dad", "Peace"]输出: ["Alaska", "Dad"]思路列举出键盘中每一行的字母组成一个数组,然后遍历输入的单词列表来做过滤操作。注意大小写判断,统一转换为大写或者小写进行判断过滤实现var findWords = function(words) { let letterDic = ["qwertyuiop", "asdfghjkl", "zx原创 2020-07-06 09:10:19 · 244 阅读 · 0 评论 -
Leetcode答题 --- 逐步求和得到正数的最小值
题目给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。你需要从左到右遍历 nums 数组,并将 startValue 依次累加上 nums 数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的 正数 作为 startValue 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-value-to-ge原创 2020-07-06 09:09:27 · 252 阅读 · 0 评论 -
Leetcode答题 --- 拼写单词
题目给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。来源:力扣(LeetCode)链接:https://le原创 2020-07-06 09:08:54 · 283 阅读 · 0 评论 -
Leetcode答题 --- 两个数组的交集
题目给定两个数组,编写一个函数来计算它们的交集。示例输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]思路通过Array.filter进行过滤操作,返回第二个数组两个数组的交集,再通过new Set去重实现var intersection = function(nums1, nums2) { return [...new Set(nums1.filter(item => nums2.includes(item)))]};...原创 2020-07-03 11:52:35 · 194 阅读 · 0 评论 -
Leetcode答题 --- Nim 游戏
题目你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/nim-game示例输入: 4输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;原创 2020-07-03 11:51:48 · 174 阅读 · 0 评论 -
Leetcode答题 --- 反转字符串
题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]思路第一种: 使用数组的高阶函数 reverse()第二种:遍历通过赋值结构交换值实现var reverseString =原创 2020-07-03 11:51:08 · 215 阅读 · 0 评论 -
Leetcode答题 --- 非递增顺序的最小子序列
题目给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。来源:力扣(LeetCode)链接原创 2020-07-02 14:41:10 · 197 阅读 · 0 评论 -
Leetcode答题 --- 山脉数组的峰顶索引
题目我们把符合下列属性的数组 A 称作山脉:A.length >= 3存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > .原创 2020-07-02 14:40:34 · 207 阅读 · 0 评论 -
Leetcode答题 --- 反转字符串中的单词 III
题目给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc" 思路先将字符串转换成数组,通过数组的reverse方法逆序,再转换回字符串实现var reverseWords = function(s) { return s.split(' ').reduce((res, cur) => res + cur.sp原创 2020-07-02 14:39:42 · 208 阅读 · 0 评论 -
Leetcode答题 --- 数组拆分 I
题目给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/array-partition-i著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例输入: [1,4,3,2]输出: 4解释: n原创 2020-07-01 09:25:35 · 433 阅读 · 0 评论 -
Leetcode答题 --- 矩阵中的幸运数
题目给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。幸运数是指矩阵中满足同时下列两个条件的元素:在同一行的所有元素中最小在同一列的所有元素中最大来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lucky-numbers-in-a-matrix示例示例 1:输入:matrix = [[3,7,8],[9,11,13],[15,16,17]]输出:[15]解释:15 是唯一的幸运原创 2020-07-01 09:25:01 · 1067 阅读 · 0 评论 -
Leetcode答题 --- 生成每种字符都是奇数个的字符串
题目给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 。返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-a-string-with-characters-that-have-odd-counts示例输入:n = 4输出:"pppz"解释:"pppz" 是一个满足题目要求的字符串,原创 2020-07-01 09:23:57 · 221 阅读 · 0 评论 -
Leetcode答题 --- 有序数组的平方
题目给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]思路使用Array.map来对数组中的每一项元素进行平方处理,再对返回的新数组进行排序实现var sortedSquares = function(A) { return A.map(item => Math.pow(item, 2)).sort((a, b) => a - b)};...原创 2020-06-30 09:23:42 · 162 阅读 · 0 评论 -
Leetcode答题 --- 两个数组间的距离值
题目给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此描述的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-原创 2020-06-30 09:23:15 · 229 阅读 · 0 评论 -
Leetcode答题 --- 增减字符串匹配
题目给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length。返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i = 0, ..., N-1,都有:如果 S[i] == "I",那么 A[i] < A[i+1]如果 S[i] == "D",那么 A[i] > A[i+1]来源:力扣(LeetCo原创 2020-06-30 09:22:39 · 3265 阅读 · 0 评论 -
Leetcode答题 --- 最大数值
题目编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。示例输入: a = 1, b = 2输出: 2思路使用Math.max实现var maximum = function(a, b) { return Math.max(a,b)};另一种解法获取两数的平均值,平均值再加上其中一个属减去平均值的绝对值实现var maximum = function(a, b) { let average = (a+b)/2 ret原创 2020-06-10 12:16:09 · 320 阅读 · 0 评论 -
Leetcode答题 --- 判定字符是否唯一
题目实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例输入: s = "leetcode"输出: false 思路使用set.size和原string.length做对比看题解学到的其他方法:使用indexOf和indexLastOf来判断下标是否相等实现var isUnique = function(astr) { return new Set(astr).size === astr.length};...原创 2020-06-10 12:13:40 · 198 阅读 · 0 评论 -
Leetcode答题 --- 自除数
题目自除数 是指可以被它包含的每一位数除尽的数。例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。还有,自除数不允许包含 0 。给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/self-dividing-numbers示例输入: 上边界left = 1, 下边界righ原创 2020-06-10 12:13:07 · 361 阅读 · 0 评论 -
Leetcode答题 --- 高度检查器
题目学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的学生应该保持不动。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/height-checker示例输入:heights = [1,1,4,2,1,3]输出:3 解释:当前数组:[1,1,4,2,1,3]目标数组:[原创 2020-06-05 15:34:41 · 226 阅读 · 0 评论 -
Leetcode答题 --- 二进制中1的个数
题目请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof示例输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000原创 2020-06-05 15:33:20 · 215 阅读 · 0 评论 -
Leetcode答题 --- 上升下降字符串
题目给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最原创 2020-06-05 15:28:32 · 189 阅读 · 0 评论 -
Leetcode答题 --- 解码字母到整数映射
题目给你一个字符串 s,它由数字('0' - '9')和 '#' 组成。我们希望按下述规则将 s 映射为一些小写英文字符:字符('a' - 'i')分别用('1' - '9')表示。字符('j' - 'z')分别用('10#' - '26#')表示。 返回映射之后形成的新字符串。题目数据保证映射始终唯一来源:力扣(LeetCode)链接:https://leetcode-cn.com/problem原创 2020-06-04 11:11:15 · 277 阅读 · 0 评论 -
Leetcode答题 --- 机器人能否返回原点
题目在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。原创 2020-06-04 11:10:44 · 468 阅读 · 0 评论 -
Leetcode答题 --- 翻转图像
题目给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。来源:力扣(LeetCo原创 2020-06-04 11:10:17 · 213 阅读 · 0 评论 -
Leetcode答题 --- 和为零的N个唯一整数
题目给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。示例输入:n = 5输出:[-7,-1,1,3,4]解释:这些数组也是正确的 [-5,-1,1,2,3],[-3,-1,2,-2,4]。思路获取正反值,根据传入的n创建长度为n的新数组,然后再折中赋值实现var sumZero = function (n) { let result = new Array(n).fill(0) for (let i = 0;原创 2020-06-03 12:08:06 · 220 阅读 · 0 评论 -
Leetcode答题 --- 唯一摩尔斯密码词
题目国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-原创 2020-06-03 12:07:00 · 274 阅读 · 0 评论 -
Leetcode答题 --- 转换成小写字母
题目实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例输入: "Hello"输出: "hello"思路使用String原生方法toLowerCase(),还可以通过ASCII枚举转换实现var toLowerCase = function(str) { return str.toLowerCase()};...原创 2020-06-03 12:03:02 · 169 阅读 · 0 评论 -
Leetcode答题 --- 6 和 9 组成的最大数字
题目给你一个仅由数字 6 和 9 组成的正整数 num。你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。请返回你可以得到的最大数字。示例输入:num = 9669输出:9969解释:改变第一位数字可以得到 6669 。改变第二位数字可以得到 9969 。改变第三位数字可以得到 9699 。改变第四位数字可以得到 9666 。其中最大的数字是 9969 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/原创 2020-06-01 17:27:41 · 714 阅读 · 0 评论 -
Leetcode答题 --- 奇数值单元格的数目
题目给你一个 n 行 m 列的矩阵,最开始的时候,每个单元格中的值都是 0。另有一个索引数组 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。你需要将每对 [ri, ci] 指定的行和列上的所有单元格的值加 1。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 「奇数值单元格」 的数目。来源:原创 2020-06-01 17:26:25 · 179 阅读 · 0 评论 -
Leetcode答题 --- 汉明距离
题目两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。示例输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。思路先将数字转换为二进制,添加0前缀使两个二进制位数相同,再循环每个位数作对比实现var hammingDistance = function(x, y) { le原创 2020-06-01 17:25:49 · 542 阅读 · 0 评论 -
Leetcode答题 --- 将每个元素替换为右侧最大元素
题目给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。完成所有替换操作后,请你返回这个数组。示例输入:arr = [17,18,5,4,6,1]输出:[18,6,6,6,1,-1]思路双重循环从当前第二项开始对比,大于则赋值到前一个索引目录下,并改变后一项的值实现 if (arr.length < 1 || arr.length > 10e3) { return } for (let i原创 2020-05-29 11:25:04 · 165 阅读 · 0 评论 -
Leetcode答题 --- 替换空格
题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例输入:s = "We are happy."输出:"We%20are%20happy."限制0 <= s 的长度 <= 10000思路使用String的replace方法实现if (s.length < 0 || s.length > 10000) { return } return s.replace(/\s/g, "%20") ...原创 2020-05-29 11:24:31 · 102 阅读 · 0 评论 -
Leetcode答题 --- 删除最外层的括号
题目有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和&nbs原创 2020-05-29 11:23:56 · 190 阅读 · 0 评论 -
Leetcode答题 --- 分割平衡字符串
题目在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/split-a-string-in-balanced-strings示例输入:s = "RLRRLLRLRL"输出:4解释:s 可以分割为 "RL", "RRLL", "RL", "RL", 每个子字符串原创 2020-05-28 11:51:17 · 292 阅读 · 0 评论 -
Leetcode答题 --- 拿硬币
题目桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例输入:[4,2,1]输出:4解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完限制1 <= n <= 41 <= coins[i] <= 10思路创建count变量保存次数,循环数组,判断数组中的每一项是否能够被2整除,能则赋值count为整除的结果原创 2020-05-28 11:50:34 · 859 阅读 · 0 评论 -
Leetcode答题 --- 打印从1到最大的n位数
题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例输入: n = 1输出: [1,2,3,4,5,6,7,8,9]思路使用Math.pow进行循环,push到新数组实现if (n <= 0) { return } let result = [] const max = Math.pow(10, n) for (let i = 1; i < ma原创 2020-05-28 11:50:03 · 167 阅读 · 0 评论 -
Leetcode --- 访问所有点的最小时间
题目平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。你可以按照下面的规则在平面上移动:每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-time-visit原创 2020-05-27 11:09:28 · 334 阅读 · 0 评论