![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode-简单难度
leetcode简单难度题目刷题记录
一笑而泯
这个作者很懒,什么都没留下…
展开
-
js解leetcode(64)-简单
1.阶乘尾数题目:设计一个算法,算出 n 阶乘有多少个尾随零思路:分析可知,因子有多少个5,就有多少个0暴力法:/** * @param {number} n * @return {number} */var trailingZeroes = function(n) { let c = 0; for (let i = 1; i <= n; i++) { let v = i; while (!(v % 5)) { c++; v /原创 2020-12-06 10:28:07 · 175 阅读 · 0 评论 -
js解leetcode(63)-简单
1.魔术索引题目:魔术索引。 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。思路:简单的话,就是依次遍历,这个就不列代码了。这里说说二分法。因为数组是有序的,所以可以借助二分法实现。首先,我们将数组每个成员减去下标,这样只需要找到成员为0的下标。在理想情况下,只有1个元素符合条件,那么,假设第i个元素是0,那么左侧原创 2020-12-04 22:32:42 · 196 阅读 · 0 评论 -
js解leetcode(62)-简单
1.检查平衡性、题目:实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。思路:递归的检查,因为子树是用高度比较的,所以如果某子树不是平衡的,那么高度返回一个非法的值就行,比如NaN或者负数或者字符串/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.rig原创 2020-12-01 21:23:23 · 170 阅读 · 1 评论 -
js解leetcode(61)-简单
1.三合一题目:三合一。描述如何只用一个数组来实现三个栈。你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。构造函数会传入一个stackSize参数,代表每个栈的大小。思路:二维数组,记录每个下表对应的数据/** * @param {number} stackSize */var TripleInOne = function原创 2020-11-29 13:20:10 · 174 阅读 · 0 评论 -
js解leetcode(60)-简单
1.移除重复节点题目:编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。思路:用map记录出现过的节点 if (!head) return head; const res = { [head.val]:true }; let resHead = head; let cur = head; head = head.next; while (head) { const next = head.next; head.next = nul原创 2020-11-27 21:45:30 · 121 阅读 · 0 评论 -
js解leetcode(59)-简单
1.判定是否互为字符重排题目:给定两个字符串s1和s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。思路:根据字典序排列,判断是否相等即可/** * @param {string} s1 * @param {string} s2 * @return {boolean} */var CheckPermutation = function(s1, s2) { s1 = [...s1].sort(); s2 = [...s2].sort(); ...原创 2020-11-24 22:04:47 · 191 阅读 · 0 评论 -
js解leetcode(58)-简单
1.左旋转字符串题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。思路:旋转字符串和旋转数组是一样的,左旋k个长度就是将前k个长度放在最后。因为k有可能大于长度l,所以先对k取余/** * @param {string} s * @param {number} n * @return {string} */var rever原创 2020-11-22 12:10:03 · 230 阅读 · 0 评论 -
js解leetcode(57)-简单
1.二叉树的深度题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。思路:递归,某个树的深度=左节点深度与右节点深度的较大值 + 1/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//*原创 2020-11-20 23:04:09 · 204 阅读 · 0 评论 -
js解leetcode(56)-简单
1.连续子数组的最大和题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路:假设list[i]为以第i个元素结尾的连续子数组的最大和,那么有两种可能,如果list[i-1]小于0,那么list[i] = nums[i],反之list[i]=list[i-1]+nums[i]。所以动态规划可解。遍历数组,计算list[i],得到最大的结果,可以 发现,只需要一个变量记录前一个元素的list[i]即可,所以不需要数组原创 2020-11-18 21:52:03 · 384 阅读 · 0 评论 -
js解leetcode(55)-简单
1.二叉树的镜像题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。思路:镜像,就是左节点变右节点,右节点变左节点。递归或者迭代均可递归:/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @r原创 2020-11-16 22:14:02 · 138 阅读 · 0 评论 -
js解leetcode(54)-简单
1.题目:删除链表的节点题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。思路:遍历节点,每次比较当前节点的next的val值,如果和目标值相同,则指向next的next/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** *.原创 2020-11-14 13:42:44 · 145 阅读 · 0 评论 -
js解leetcode(53)-简单
1.用两个栈实现队列题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )思路:js因为数组的有shift和pop所以很简单,如果用java中的栈的话,思路大概是这样:两个数组一个用于添加元素l1,一个用于删除元素l2。添加元素时,将所有元素都放进l1中,然后将元素入l1;删除元素时,所有元素出栈,推入l2,删除l2的栈.原创 2020-11-11 21:36:29 · 195 阅读 · 0 评论 -
js解leetcode(52)-简单
1.早餐组合题目:小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1思路:用暴力法的话很容易超时,所以要优化,因为是不超过x元,很容易想到要先排序,然后遍历主食的数组,分别找到饮料的种类,然后累加原创 2020-11-09 21:15:59 · 422 阅读 · 0 评论 -
js解leetcode(51)-简单
1.分式化简题目:有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗?连分数是形如上图的分式。在本题中,所有系数都是大于等于0的整数。输入的cont代表连分数的系数(cont[0]代表上图的a0,以此类推)。返回一个长度为2的数组[n, m],使得连分数的值等于n / m,且n, m最大公约数为1。思路:通分,然后反转分子和分母/** * @param {number[]} cont * @return {number[]} */var fractio.原创 2020-11-06 20:48:19 · 277 阅读 · 0 评论 -
js解leetcode(50)-简单
1.第K个缺失的正整数题目:给你一个严格升序排列的正整数数组arr和一个整数k。请你找到这个数组里第k个缺失的正整数。思路:用一个变量递增,一个变量记录缺失的整数数量,对数组遍历,如果两个数不相等说明缺失。/** * @param {number[]} arr * @param {number} k * @return {number} */var findKthPositive = function(arr, k) { let v = 0; let ...原创 2020-11-04 21:34:47 · 920 阅读 · 0 评论 -
js解leetcode(49)-简单
1.去掉最低工资和最高工资后的平均值题目:给你一个整数数组salary,数组里每个数都是 唯一的,其中salary[i] 是第i个员工的工资。请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。思路:排序,或者用两个变量记录/** * @param {number[]} salary * @return {number} */var average = function(salary) { let min = salary[0]; let max = ...原创 2020-11-01 12:23:31 · 293 阅读 · 0 评论 -
js解leetcode(48)-简单
1.数组中两元素的最大乘积题目:给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。思路:排序之后取前两个元素或者用两个变量找出最大值和次大值/** * @param {number[]} nums * @return {number} */var maxProduct = function(nums) { nums.sort((a, b) => b - a);原创 2020-10-30 21:24:18 · 210 阅读 · 0 评论 -
js解leetcode(47)-简单
1.用栈操作构建数组题目:给你一个目标数组 target 和一个整数 n。每次迭代,需要从list = {1,2,3..., n} 中依序读取一个数字。请使用下述操作来构建目标数组 target :Push:从 list 中读取一个新元素, 并将其推入数组中。Pop:删除数组中的最后一个元素。如果目标数组构建完成,就停止读取更多元素。题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。请返回构建目标数组所用的操作序列。题目数据保证答案是唯一的。思路:从数字..原创 2020-10-27 21:30:59 · 318 阅读 · 1 评论 -
js解leetcode(46)-简单
1.逐步求和得到正数的最小值题目:给你一个整数数组 nums。你可以选定任意的正数 startValue 作为初始值。你需要从左到右遍历 nums数组,并将 startValue 依次累加上nums数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的正数作为 startValue 。思路:题目的要求,是对数组进行累加,并要求累加的和永远大于等于1.所以只需要对数组进行累加,计算累加过程中的最小值即可。注意的是该数要是正数,所以最小值是1/** * ...原创 2020-10-25 13:46:19 · 206 阅读 · 0 评论 -
js解leetcode(45)-简单
1.按既定顺序创建目标数组题目:给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:目标数组 target 最初为空。按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。重复上一步,直到在 nums 和 index 中都没有要读取的元素。请你返回目标数组。题目保证数字插入位置总是存在。思路:按顺序插入/** * @param {number[]} nums *原创 2020-10-22 20:26:19 · 110 阅读 · 0 评论 -
js解leetcode(44)-简单
1.有多少小于当前数字的数字题目:给你一个数组nums,对于其中每个元素nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个nums[i]你必须计算出有效的j的数量,其中 j 满足j != i 且 nums[j] < nums[i]。以数组形式返回答案。思路:对原数组进行排序,记录每一个数字的下标,根据下标即可判断有多少数字小于当前数字,注意重复数字的处理/** * @param {number[]} nums * @return {n...原创 2020-10-20 20:27:34 · 588 阅读 · 0 评论 -
leetcode刷题记录(43)-简单
1.将数字变成0的操作次数题目:给你一个非负整数num,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。思路:迭代/** * @param {number} num * @return {number} */var numberOfSteps = function(num) { let c = 0; while (num) { if (num % 2) { num -= 1; } else {..原创 2020-10-17 09:48:09 · 135 阅读 · 0 评论 -
leetcode刷题记录(42)-简单
1.将整数转换为两个无零整数的和题目:「无零整数」是十进制表示中 不含任何 0的正整数。给你一个整数n,请你返回一个 由两个整数组成的列表 [A, B],满足:A 和 B都是无零整数A + B = n题目数据保证至少有一个有效的解决方案。如果存在多个有效解决方案,你可以返回其中任意一个。思路:假定a,b,满足条件,从a=1开始迭代即可/** * @param {number} n * @return {number[]} */var getNoZeroInte...原创 2020-10-15 13:36:13 · 104 阅读 · 0 评论 -
leetcode刷题记录(41)-简单
1.统计位数为偶数的数字题目:给你一个整数数组nums,请你返回其中位数为偶数的数字的个数。/** * @param {number[]} nums * @return {number} */var findNumbers = function(nums) { return nums.filter((i) => !(`${i}`.length % 2)).length;};2.将每个元素替换为右侧最大元素题目:给你一个数组arr,请你将每个元素用它右边最大...原创 2020-10-12 21:23:28 · 231 阅读 · 0 评论 -
leetcode刷题记录(40)-简单
1.访问所有点的最小时间题目:平面上有n个点,点的位置用整数坐标表示points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。你可以按照下面的规则在平面上移动:每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。思路:因为左移、右移、对角线移动都是耗时1,所以计算两个点之间的x、y方向的距离累加即可/** * @param {number[...原创 2020-10-10 21:29:39 · 246 阅读 · 1 评论 -
leetcode刷题记录(39)-简单
1.分割平衡字符串题目:在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的。给出一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。思路:用两个变量记录L和R的数量,相等的时候+1/** * @param {string} s * @return {number} */var balancedStringSplit = function(s) { let vr = 0; let vl = 0; let .原创 2020-10-07 13:49:14 · 116 阅读 · 0 评论 -
leetcode刷题记录(38)-简单
1.一周中的第几天给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。思路:用Date对象的getDay()方法/** * @param {number} day * @param {number} month ..原创 2020-10-05 23:53:31 · 131 阅读 · 0 评论 -
leetcode刷题记录(37)-简单
1.一年中的第几天题目:给你一个按 YYYY-MM-DD 格式表示日期的字符串date,请你计算并返回该日期是当年的第几天。通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。思路:用Date转换为日期对象,获取时间戳,根据时间戳的差值来计算/** * @param {string} date * @return {number} */var dayOfYear = functio.原创 2020-10-03 10:27:27 · 347 阅读 · 0 评论 -
leetcode刷题记录(36)-简单
1.分糖果II题目:排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n+ 1 颗糖果,第二个小朋友 n+ 2 颗,依此类推,直到给最后一个小朋友 2 * n颗糖果。重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就...原创 2020-09-30 21:02:07 · 94 阅读 · 0 评论 -
leetcode刷题记录(35)-简单
1.删除字符串中的所有相邻重复项题目:给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。思路:用栈记录保存的字符,然后比较/** * @param {string} S * @return {string} */var removeDuplicates = function(S) { S = S.split(""); co.原创 2020-09-27 21:33:37 · 166 阅读 · 0 评论 -
leetcode刷题记录(34)-简单
1.距离顺序排列矩阵单元格题目:给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为(r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。).原创 2020-09-25 21:19:29 · 256 阅读 · 0 评论 -
leetcode刷题记录(33)-简单
1.将数组分成相等的三个部分题目:给你一个整数数组A,只有可以将其划分为三个和相等的非空部分时才返回true,否则返回 false。形式上,如果可以找出索引i+1 < j且满足A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1]就可以将数组三等分。思路:先判断是否能分成相等的三个部分,即和是否能被3整除。然后,判断成员是否全部...原创 2020-09-23 22:09:13 · 134 阅读 · 0 评论 -
leetcode刷题记录(32)-简单
1.可以被一步捕获的棋子数题目:在一个 8 x 8 的棋盘上,有一个白色的车(Rook),用字符 'R' 表示。棋盘上还可能存在空方块,白色的象(Bishop)以及黑色的卒(pawn),分别用字符 '.','B' 和 'p' 表示。不难看出,大写字符表示的是白棋,小写字符表示的是黑棋。车按国际象棋中的规则移动。东,西,南,北四个基本方向任选其一,然后一直向选定的方向移动,直到满足下列四个条件之一:棋手选择主动停下来。棋子因到达棋盘的边缘而停下。棋子移动到某一方格来捕获位于该方格上敌方(黑原创 2020-09-20 20:21:43 · 130 阅读 · 0 评论 -
leetcode刷题记录(31)-简单
1.有序数组的平方题目:给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。思路:先用自带的方法排序/** * @param {number[]} A * @return {number[]} */var sortedSquares = function(A) {return A.map(i=>i*i).sort((a,b)=>a-b)};也可以用双指针实现/** * @param {number[]} A * .原创 2020-09-17 22:04:50 · 145 阅读 · 0 评论 -
leetcode刷题记录(30)-简单
1.验证外星语词典题目:某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。思路:记录每个字符的新顺序,然后依次比较单词中当前字符的顺序即可,如果遇到相等的字符,就比较下一个字符/** * @param {string[]} words * @param {string}原创 2020-09-15 22:26:37 · 147 阅读 · 0 评论 -
leetcode刷题记录(29)-简单
1.重新排列日志文件题目:你有一个日志数组 logs。每条日志都是以空格分隔的字串。对于每条日志,其第一个字为字母与数字混合的 标识符 ,除标识符之外的所有字为这一条日志的 内容 。除标识符之外,所有字均由小写字母组成的,称为 字母日志除标识符之外,所有字均由数字组成的,称为 数字日志题目所用数据保证每个日志在其标识符后面至少有一个字。请按下述规则将日志重新排序:所有 字母日志 都排在 数字日志 之前。字母日志 在内容不同时,忽略标识符后,按内容字母顺序排序;在内容相同时,按标原创 2020-09-12 15:45:29 · 103 阅读 · 0 评论 -
leetcode刷题记录(28)-简单
1.仅仅反转字母题目:给定一个字符串S,返回“反转后的”字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。思路:双指针法,记录两边的字符串拼接结果,左指针和右指针遇到字母时,交换各自位置上的字符,遇到其他字符正常拼接,直到相遇/** * @param {string} S * @return {string} */var reverseOnlyLetters = function(S) { let left = 0, right = S.length ...原创 2020-09-10 22:06:28 · 226 阅读 · 0 评论 -
leetcode刷题记录(27)-简单
1.单调数列题目:如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A是单调数组时返回 true,否则返回 false。思路:遇到不同的字符时,比较当前的关系和上一次的大小关系就行/** * @param {number[]} A * @return {boolean} */.原创 2020-09-07 22:18:56 · 186 阅读 · 0 评论 -
leetcode刷题记录(26)-简单
1.三维形体投影面积题目:在N*N的网格中,我们放置了一些与 x,y,z 三轴对齐的1 * 1 * 1立方体。每个值v = grid[i][j]表示 v个正方体叠放在单元格(i, j)上。现在,我们查看这些立方体在 xy、yz和 zx平面上的投影。投影就像影子,将三维形体映射到一个二维平面上。在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。返回所有三个投影的总面积。思路:仔细观察,在x-y面,面积是所有非0数的成员的数量,在x-z面,是是相...原创 2020-09-05 16:04:24 · 114 阅读 · 0 评论 -
leetcode刷题记录(25)-简单
1.转置矩阵题目:给定一个矩阵A,返回A的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。思路:行列下标转换就行/** * @param {number[][]} A * @return {number[][]} */var transpose = function(A) { const h = A.length; const w = A[0].length; const res = new Array(w).fill("").map...原创 2020-09-03 22:29:44 · 124 阅读 · 0 评论