![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
js练习题
天天501
须知少年凌云志,曾许人间第一流
展开
-
字符串相加
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。原创 2024-04-20 08:00:00 · 161 阅读 · 1 评论 -
第三大的数
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。// 使用三个变量分别维护第一二三大的数。// 使用sort排序,O(nlogN)原创 2024-04-20 07:45:00 · 158 阅读 · 0 评论 -
左叶子之和
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。原创 2024-04-19 10:27:52 · 278 阅读 · 0 评论 -
字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。原创 2024-04-19 10:26:30 · 308 阅读 · 0 评论 -
两个数组的交集
/ 先给两个数组排序,后循环一个数组,判断当前两个数组的元素的大小关系,一路推进(双指针法)输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输入: nums1 = [1,2,2,1], nums2 = [2,2]// 时间复杂度 O(nlogn + mlogm),空间复杂度 O(1)// 时间复杂度 O(n + m),空间复杂度 O(n)// 需要先去重,不然得到的结果数组中可能会有重复。给定两个数组,编写一个函数来计算它们的交集。原创 2024-04-18 07:45:00 · 275 阅读 · 1 评论 -
反转字符串中的元音字母
/ 双指针,如果两个指针指向的都是元音字符则交换并改变指针指向,否则只改变不是指向元音字符的那个指针。编写一个函数,以字符串作为输入,反转该字符串中的元音字母。// 使用一个数组来存储从后遍历得到的元音字符。// 再次循环交换元音字符的位置。// 先保存每一个元音字符。原创 2024-04-18 07:00:00 · 311 阅读 · 0 评论 -
比特位计数
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。// i 的最低位是1,则 i 中1的个数是 i>>1 中1的个数再加1。// i 的最低位是0,则 i 中1的个数和 i>>1 中1的个数相同。输出: [0,1,1]原创 2024-04-17 18:24:14 · 704 阅读 · 0 评论 -
打家劫舍 III
/ 分别递归出盗取当前节点、盗取左右四个孙节点的金额和,和不盗取根节点(则盗取金额是两个子节点盗取的金额和)做比较,大的就是盗取当前节点所能获得的最大金额。// res[0]为不包括根节点的最大值,res[1]为包括根节点的最大值。// 包含根节点,最大值为两个子树不包含根节点的最大值加上根节点的值。// 取根节点,盗取的金额是当前的节点值+左右孙节点盗取的金额和。// 不取根节点的话,则盗取的金额是子节点盗取的金额和。输入: [3,2,3,null,3,null,1]原创 2024-04-17 18:23:27 · 265 阅读 · 0 评论 -
各位相加js
/ js是弱语言,因此要使用parseInt()转为整数。解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。由于 2 是一位数,所以返回 2 */// 数组根:https://en.wikipedia.org/wiki/Digital_root。/* 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。原创 2024-04-15 20:56:46 · 186 阅读 · 2 评论 -
二叉树的所有路径
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3。给定一个二叉树,返回所有从根节点到叶子节点的路径。输出: [“1->2->5”, “1->3”]说明: 叶子节点是指没有子节点的节点。原创 2024-04-16 07:15:00 · 219 阅读 · 1 评论 -
删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。原创 2024-04-15 20:55:10 · 155 阅读 · 0 评论 -
二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。解释: 节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。原创 2024-04-15 20:54:29 · 969 阅读 · 0 评论 -
Excel表列序号
给定一个Excel表格中的列名称,返回其相应的列序号。原创 2024-04-14 13:30:00 · 141 阅读 · 0 评论 -
Excel表列名称
给定一个正整数,返回它在 Excel 表中相对应的列名称。原创 2024-04-14 10:30:00 · 183 阅读 · 0 评论 -
寻找旋转排序数组中的最小值
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。假设按照升序排序的数组在预先未知的某个点上进行了旋转。允许重复会影响算法的时间复杂度吗?会如何影响,为什么?请找出其中最小的元素。注意数组中可能存在重复的元素。这道题是 寻找旋转排序数组中的最小值 的延伸题目。输入: [2,2,2,0,1]输入: [1,3,5]原创 2024-04-13 18:53:32 · 172 阅读 · 0 评论 -
环形链表js
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。// 使用 map 存储每一个节点的地址。给定一个链表,判断链表中是否有环。原创 2024-04-12 18:30:35 · 255 阅读 · 1 评论 -
复制带随机指针的链表
/ 第二次循环给复制的结点的random赋值,可以直接定位到原结点.random.next,即赋值结点的random。给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。// O(1)的空间复杂度,O(n)的时间复杂度。// 需要注意的是,因为之前将复制的结点添加到了原链表上,改动了原链表。// 所以在截取复制的链表的时候还要顺带还原原链表,否则会报错。// 使用map缓存复制的结点,并和原结点对应起来。// O(n)的空间复杂度,O(n)的时间复杂度。原创 2024-04-12 18:29:43 · 436 阅读 · 0 评论 -
寻找旋转排序数
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。假设按照升序排序的数组在预先未知的某个点上进行了旋转。允许重复会影响算法的时间复杂度吗?会如何影响,为什么?请找出其中最小的元素。注意数组中可能存在重复的元素。这道题是 寻找旋转排序数组中的最小值 的延伸题目。输入: [2,2,2,0,1]输入: [1,3,5]原创 2024-04-11 11:11:41 · 242 阅读 · 0 评论 -
对链表进行插入排序
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。// 分为已排序链表为空和已排序链表第一个节点大于当前节点两种情况。// mark为false时代表当前节点要插在已排序链表的首部。// 先缓存下一个节点信息防止待会被更改了影响循环的进行。输入: 4->2->1->3。输出: 1->2->3->4。原创 2024-04-11 11:10:34 · 959 阅读 · 0 评论 -
js矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。转载 2023-10-24 06:00:00 · 28 阅读 · 0 评论 -
js解爬楼梯
需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?解释: 有两种方法可以爬到楼顶。解释: 有三种方法可以爬到楼顶。注意:给定 n 是一个正整数。转载 2023-10-24 06:00:00 · 183 阅读 · 0 评论 -
二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。输入: a = “11”, b = “1”翻译 2023-10-24 06:00:00 · 24 阅读 · 0 评论 -
非负整数,在该数的基础上加1
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。输入: [1,2,3]输出: [1,2,4]翻译 2023-10-24 06:00:00 · 22 阅读 · 0 评论 -
js旋转链表
输入: 1->2->3->4->5->NULL, k = 2。向右旋转 1 步: 5->1->2->3->4->NULL。向右旋转 2 步: 4->5->1->2->3->NULL。输入: 0->1->2->NULL, k = 4。输出: 4->5->1->2->3->NULL。向右旋转 1 步: 2->0->1->NULL。向右旋转 2 步: 1->2->0->NULL。向右旋转 3 步: 0->1->2->NULL。向右旋转 4 步: 2->0->1->NULL。输出: 2->0->1->NULL。转载 2023-10-23 06:00:00 · 41 阅读 · 0 评论 -
js合并区间
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]给出一个区间的集合,请合并所有重叠的区间。输入: [[1,4],[4,5]]输出: [[1,5]]转载 2023-10-23 06:00:00 · 187 阅读 · 0 评论 -
最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。输入: [-2,1,-3,4,-1,2,1,-5,4],转载 2023-10-22 09:16:41 · 30 阅读 · 0 评论 -
顺序进行报
21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。1 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。注意:整数顺序将表示为一个字符串。输出: “1211”转载 2023-10-22 09:15:09 · 23 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。输入: [1,3,5,6], 5。输入: [1,3,5,6], 2。你可以假设数组中无重复元素。转载 2023-10-22 09:13:40 · 25 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
/ 如果此时arr[mid]就是左数第一个target了,那么循环结束后找不到target,left也会加1回到此时的mid。// 如果当前的数组元素是target并且是要找左边界,则将右边界置为mid-1,并向左边迭代。// 找右边界时,当退出循环的时候,左边的部分都大于或等于target,所以需要将下标-1。输入: nums = [5,7,7,8,8,10], target = 8。输入: nums = [5,7,7,8,8,10], target = 6。输出: [-1,-1]转载 2023-10-22 09:12:41 · 33 阅读 · 0 评论 -
实现strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。// 计算next数组,next[i]表示str[i]前面字符串的最长公共前后缀。// 因为if中是先i++再给next[i]赋值,所以循环到len-1就够了。// 如 abcdabe,next[6]=2,最长公共前后缀是ab。// next[0]前面没有字符串了,所以置为-1。// 匹配成功,返回在str中第一次出现s的下标。// 没有匹配到就返回-1。转载 2023-10-21 06:00:00 · 26 阅读 · 0 评论 -
删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。给定数组 nums = [1,1,2],你不需要考虑数组中超出新长度后面的元素。// 方法一:使用一个变量标记。// 方法二:splice。转载 2023-10-21 06:15:00 · 24 阅读 · 0 评论 -
k个一组翻转链表
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。当 k = 2 时,应当返回: 2->1->4->3->5。当 k = 3 时,应当返回: 3->2->1->4->5。给定这个链表:1->2->3->4->5。你的算法只能使用常数的额外空间。转载 2023-10-21 06:00:00 · 25 阅读 · 0 评论 -
13.两两交换链表中的节点
给定 1->2->3->4, 你应该返回 2->1->4->3.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。转载 2023-10-20 06:00:00 · 24 阅读 · 0 评论 -
12. 合并 k 个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。输出: 1->1->2->3->4->4->5->6。转载 2023-10-20 05:45:00 · 26 阅读 · 0 评论 -
11.合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。转载 2023-10-20 06:00:00 · 28 阅读 · 0 评论 -
10.有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。左括号必须用相同类型的右括号闭合。注意空字符串可被认为是有效字符串。左括号必须以正确的顺序闭合。转载 2023-10-20 06:00:00 · 30 阅读 · 0 评论 -
12.合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。输出: 1->1->2->3->4->4->5->6。转载 2023-10-19 06:45:00 · 21 阅读 · 0 评论 -
10.有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。左括号必须用相同类型的右括号闭合。注意空字符串可被认为是有效字符串。左括号必须以正确的顺序闭合。转载 2023-10-19 06:45:00 · 25 阅读 · 0 评论 -
9.检测大写字母
如果单词不只含有一个字母,只有首字母大写, 比如 “Google”。单词中所有字母都不是大写,比如"leetcode"。给定一个单词,你需要判断单词的大写使用是否正确。否则,我们定义这个单词没有正确使用大写字母。全部字母都是大写,比如"USA"。转载 2023-10-19 06:45:00 · 27 阅读 · 0 评论 -
8. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.你能尝试使用一趟扫描实现吗?给定的 n 保证是有效的。转载 2023-10-18 07:00:00 · 28 阅读 · 0 评论