LeetCode题解
文章平均质量分 61
Amoxicillin——ONE
这个作者很懒,什么都没留下…
展开
-
LeetCode -- 20.有效的括号
题目:有效的括号 描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 输入:s = “()[]{}” 输出:true 输入:s = “([)]” 输出:false 思路:平心而论,当我看到这道题的时候我感到很恐惧,以及疑惑为什么是easy难度,因为我觉得这道题非得递归才行。但是实际上不是的,因为栈,他配得上easy。 我们遍历给定的字符串 s。当我们原创 2021-04-17 00:00:18 · 73 阅读 · 0 评论 -
LeetCode --19.删除链表的倒数第N个结点
链接:删除链表的倒数第N个结点 描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 思路:看到题目最开始想到的就是先扫描一遍确定链表长度len,再顺序遍历链表删除第len-n+1的结点。显然这样做并不能满足一次遍历。 代码1(先确定长度): /** * Definition for singly-linked list. * struct ListN原创 2021-04-13 15:30:33 · 89 阅读 · 0 评论 -
LeetCode -- 179.最大数
链接:最大数 描述:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例: 输入:nums = [3,30,34,5,9] 输出:“9534330” 输入:nums = [10] 输出:“10” 思路:看到题目的瞬间就想到了sort,只不过这里的数组里面装的数全是int,所以需要先转化一下,这时就使用to_string(t)了。btw,通常的sort函数包含的是两个参数,用来确定排序的范围,且原创 2021-04-12 17:25:17 · 85 阅读 · 0 评论 -
LeetCode -- 17.电话号码的字母组合
链接:电话号码的字母组合 描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:digits = “23” 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 输入:digits = “” 输出:[] 输入:digits = “2” 输出:[“a”,“b”,“c”] 思路:这是一道很典型的组合问题,首先想到的就是递归和原创 2021-04-10 15:28:46 · 106 阅读 · 0 评论 -
LeetCode -- 83.删除排序链表中的重复元素
链接:删除排序链表中的重复元素 描述:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。 返回同样按升序排列的结果链表。 举例: 输入:head = [1,1,2,3,3] 输出:[1,2,3] 思路:思路很清晰就不多提,主要是看到官方题解之后产生了一点疑惑。想着:好像只改变了cur,没改变head,但最后返回的是head。主要问题就在于指针方面的知识掌握的还不太好。以此来记录以下。 代码: /** * Definition for sing原创 2021-03-26 19:29:43 · 130 阅读 · 0 评论 -
LeetCode -- 73.矩阵置零
链接:矩阵置零 描述:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 思路:因为需要原地修改,那么如果判断的元素条件是原矩阵的话,就会出现很多因为被修改而后来成为的0元素来扰乱视听,所以我们初始化一个矩阵与原矩阵相同用来进行判断。 代码: class Solution { public: void原创 2021-03-21 14:20:06 · 105 阅读 · 2 评论 -
LeetCode -- 150.逆波兰表达式求解
链接:逆波兰表达式求解 描述:根据 逆波兰表示法,求表达式的值。 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 输入:tokens = [“4”,“13”,“5”,"/","+"] 输出:6 解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6 输入:tokens = [“10”,“6”,“9”,“3”,"+原创 2021-03-20 15:11:44 · 75 阅读 · 0 评论 -
LeetCode -- 705. 设计哈希集合
链接:设计哈希集合 描述:不使用任何内建的哈希表库设计一个哈希集合(HashSet)。 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key 。 bool contains(key) 返回哈希集合中是否存在这个值 key 。 void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。 输入: [“MyHashSet”, “add”, “add”, “contains”, “contains”, “add”, “cont原创 2021-03-14 14:30:32 · 104 阅读 · 0 评论 -
LeetCode -- 6. Z 字形变换
链接:Z 字形变换 描述:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 思路:一开始想找数学规律,但并没有找到TAT。最后还是用了最蠢的二维数组(有点原创 2021-03-08 18:14:00 · 94 阅读 · 0 评论 -
LeetCode -- 8.字符串转换整数(atoi)
链接:字符串转换整数(atoi) 描述:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读原创 2021-03-07 14:58:48 · 109 阅读 · 2 评论 -
LeetCode -- 338. 比特位计数
链接:比特位计数 描述:给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 输入: 2 输出: [0,1,1] 要求: 给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗? 要求算法的空间复杂度为O(n)。 你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的 __builtin_popcount)来执行此操作。 思路:原创 2021-03-03 16:43:13 · 105 阅读 · 1 评论 -
LeetCode -- 4.寻找两个正序数组的中位数
链接:寻找两个正序数组的中位数 描述:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5 要求:设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题 思路:一开始想到的就是sort,有轮子何必还要造轮子呢。代码和运行结果是这样的: class So原创 2021-03-02 15:52:09 · 77 阅读 · 0 评论 -
LeetCode -- 13. 罗马数字转整数
链接:罗马数字转整数 描述:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5原创 2021-02-20 12:41:59 · 97 阅读 · 0 评论 -
LeetCode -- 1004. 最大连续1的个数 III
链接:最长回文子串 描述: 给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。 返回仅包含 1 的最长(连续)子数组的长度。 输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2 输出:6 解释: [1,1,1,0,0,1,1,1,1,1,1] 粗体数字从 0 翻转到 1,最长的子数组长度为 6。 思路:滑动窗口,两边缘为left和right。一开始同为A[0]处,后left不变,right向右移动直到left~right间的0个数大于K,此原创 2021-02-19 19:54:45 · 228 阅读 · 0 评论 -
LeetCode -- 5.最长回文子串
链接:最长回文子串 描述: 给你一个字符串 s,找到 s 中最长的回文子串。 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 输入:s = “a” 输出:“a” 两种解法动态规划思路代码中心扩展算法思路 动态规划 思路 回文串的头尾去掉之后依旧是一个回文串,由此可以这样扩展,咱们用二位数组一维化写出一个伪递归式,本质是一个真值表。 状态方程:P(i,j)=P(i+1,j−1)∧(Si==Sj) 意思是原头尾相同,且前后各扩展一个也能相同 代码 cla原创 2021-02-18 23:04:39 · 58 阅读 · 0 评论 -
LeetCode -- 566.重塑矩阵
链接:重塑矩阵 描述:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。 要求:如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。 输入: nums = [[1,2], [3,4]] r = 1, c = 4 输出:[[1,2,3,4]] 解释: 行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用原创 2021-02-17 22:49:23 · 85 阅读 · 0 评论 -
LeetCode -- 765.情侣牵手
链接:情侣牵手 描述:N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。 人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2N-2, 2N-1)。 这些情侣的初始座位 row[i] 是由最初始坐在第 i 个座位上的人决定的。 说明: len(row) 是偶数且数值在 [4, 60]范围内。 可以保证row 是原创 2021-02-14 21:50:25 · 108 阅读 · 0 评论 -
LeetCode -- 448.找到所有数组中消失的数字
链接:找到所有数组中消失的数字 描述:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 要求:您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 输入:[4,3,2,7,8,2,3,1] 输出:[5,6] 思路:当然一开始能想到的就是hash表,但是我觉得时间复杂度和空间复杂度容易超标。所以可以换个思考方式。原创 2021-02-13 23:42:17 · 111 阅读 · 0 评论 -
LeetCode -- 27.移除元素
链接:移除元素 描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素 输入: nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的原创 2021-02-12 22:42:23 · 68 阅读 · 2 评论 -
LeetCode -- 36.有效的数独
链接:有效的数独 描述:判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1~9 在每一行只能出现一次。 数字 1~9 在每一列只能出现一次。 数字 1~9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 输入: [ [“5”,“3”,".",".",“7”,".",".",".","."], [“6”,".",".",“1”,“9”,“5”,".",".","."], [".",“9”,“8”,".",".",".",".",“6”,"."], [原创 2021-02-11 21:25:49 · 107 阅读 · 0 评论 -
LeetCode -- 14. 最长公共前缀
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-02-10 18:21:37 · 95 阅读 · 0 评论