![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode实战
胖虎卖汤圆
上海科技大学硕士
展开
-
Leetcode实战: 44. 通配符匹配
题目给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例1输入:s = "aa"p = "a"输出:...原创 2020-03-30 16:55:00 · 128 阅读 · 0 评论 -
Leetcode实战: 134. 加油站
题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元...原创 2020-03-28 17:11:42 · 163 阅读 · 0 评论 -
Leetcode实战:55. 跳跃游戏
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达...原创 2020-03-28 11:37:52 · 105 阅读 · 0 评论 -
Leetcode实战: 455. 分发饼干
题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。...原创 2020-03-27 11:01:24 · 175 阅读 · 0 评论 -
Leetcode实战: 392. 判断子序列
题目给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例1s = ...原创 2020-03-26 11:15:32 · 101 阅读 · 0 评论 -
Leetcode实战: 122. 买卖股票的最佳时机 II
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能...原创 2020-03-25 16:22:22 · 158 阅读 · 0 评论 -
Leetcode实战: 99. 恢复二叉搜索树
题目二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例1示例2算法实现:参考:https://leetcode-cn.com/problems/recover-binary-search-tree/solution/zhong-xu-bian-li-shuang-zhi-zhen-zhao-ni-xu-dui-mo/class Solution {p...原创 2020-03-24 22:34:58 · 106 阅读 · 0 评论 -
leetcode算法练习——不同的二叉搜索树
题目:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:代码如下:长度为n的序列的不同二叉搜索树个数C(n)为卡塔兰数。首先,设长度为nnn,数iii作为根时,二叉搜索树的个数为F(i,n)F(i,n)F(i,n)则C(n)C(n)C(n)=∑i=1nF(i,n)\sum^n_{i=1}F(i,n)∑i=1nF(i,n)当数iii作为根时,111到i−1i...原创 2020-03-23 23:48:28 · 100 阅读 · 0 评论 -
Leetcode实战: 94. 二叉树的中序遍历
题目给定一个二叉树,返回它的中序 遍历。示例进阶: 递归算法很简单,你可以通过迭代算法完成吗?算法实现:递归class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; return dfs(root, re...原创 2020-03-22 19:12:53 · 94 阅读 · 0 评论 -
Leetcode实战: 104. 二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。算法实现class Solution {public: int maxDepth(TreeNode* root) { return dfs...原创 2020-03-21 17:14:29 · 131 阅读 · 0 评论 -
Leetcode实战: 101. 对称二叉树
题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:说明如果你可以运用递归和迭代两种方法解决这个问题,会很加分。算法实现将这棵树分成左子树和右子树,然后分别前序遍历,左边先遍历左节点,右边先遍历右节点,转化成相同的两棵树问题和BFS的区别就是BFS会消耗...原创 2020-03-20 18:01:56 · 201 阅读 · 0 评论 -
Leetcode实战:100. 相同的树
题目:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例2输入: 1 ...原创 2020-03-19 11:51:03 · 112 阅读 · 0 评论 -
Leetcode实战:10. 正则表达式匹配
'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素原创 2020-03-18 21:18:43 · 184 阅读 · 0 评论 -
Leetcode实战: 5. 最长回文子串
题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。算法实现:中心扩散法class Solution {public: string longestPalindrome(string s) { int length(1), i(1), j(0); int size = s.size(); unordered_set<char&g...原创 2020-03-17 20:55:16 · 130 阅读 · 0 评论 -
Leetcode实战: 3. 无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例1输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例2输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例3输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所...原创 2020-03-16 21:40:27 · 104 阅读 · 0 评论 -
Leetcode实战: 20. 有效的括号
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例1输入: "()"输出: true示例2输入: "()[]{}"输出: true示例3输入: "(]"输出: false示例4输入: "(...原创 2020-03-15 18:57:46 · 179 阅读 · 0 评论 -
Leetcode实战: 14. 最长公共前缀
题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例1输入: ["flower","flow","flight"]输出: "fl"示例2输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明所有输入只包含小写字母 a-z 。算法实现:class Solution {public:...原创 2020-03-14 16:08:03 · 157 阅读 · 0 评论 -
Leetcode实战: 13. 罗马数字转整数
题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D5000M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字...原创 2020-03-13 17:17:37 · 118 阅读 · 0 评论 -
Leetcode实战: 23. 合并K个排序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6算法实现:方法一,两两合并/** * Definition for singly-linked list. ...原创 2020-03-13 00:21:23 · 104 阅读 · 0 评论 -
Leetcode实战: 19.删除链表的倒数第n个节点
题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.分析:双指针。先令虚拟节点 firHead 指向 head,设定双指针lll和mmm,初始都指向firHead。移动mmm,直到lll与mm...原创 2020-03-12 20:59:25 · 96 阅读 · 0 评论 -
Leetcode实战: 123. 买卖股票的最佳时期
题目:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利...原创 2020-03-06 23:33:06 · 119 阅读 · 0 评论 -
Leetcode实战:16. 最接近的三数之和
题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).算法实现:class So...原创 2020-03-04 23:53:52 · 116 阅读 · 1 评论 -
Leetcode实战:15. 三数之和
题目给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]算法实现:双指针cl...原创 2020-03-03 23:07:06 · 92 阅读 · 0 评论 -
Leetcode实战:27. 移除元素
题目给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素...原创 2020-03-03 00:26:24 · 80 阅读 · 0 评论 -
Leetcode实战:26. 删除排序数组中的重复项
题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例2:给...原创 2020-03-02 00:16:36 · 103 阅读 · 0 评论 -
Leetcode实战:1.两数之和
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:在这里插入代码片class Solution {public: vector<int> twoSum(vector<int>& num...原创 2020-01-12 15:32:24 · 139 阅读 · 1 评论 -
Leetcode实战:235.二叉搜索树的最近公共祖先
题目:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例1:输入: root = [...原创 2019-10-08 10:50:40 · 97 阅读 · 0 评论 -
Leetcode实战:231.2的幂
题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例1:输入: 1输出: true解释: 20 = 1示例2:输入: 16输出: true解释: 24 = 16示例3:输入: 218输出: false算法实现:如果n时2的幂n & (n - 1) == 0class Solution(object): def isPowerOfTwo(...原创 2019-10-04 10:57:00 · 96 阅读 · 0 评论 -
Leetcode实战:230.二叉搜索树中第K小的元素
题目:给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1示例2:在这里插入代码片算法实现:结果:...原创 2019-10-04 10:49:26 · 92 阅读 · 0 评论 -
Leetcode实战:217.存在重复元素
题目:给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例1:输入: [1,2,3,1]输出: true示例2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true算法实现:class Solution(object...原创 2019-10-04 10:41:14 · 87 阅读 · 0 评论 -
Leetcode实战:16.最接近的三数之和
题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).算法实现:class So...原创 2019-09-04 20:37:05 · 110 阅读 · 0 评论 -
Leetcode实战:236.二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例1:输入: root = [3,5,...原创 2019-10-08 10:56:00 · 309 阅读 · 0 评论 -
Leetcode实战:237. 删除链表中的节点
题目:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例2:输...原创 2019-10-08 23:17:06 · 104 阅读 · 0 评论 -
Leetcode实战:238. 除自身以外数组的乘积
题目:给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]算法实现:class Solution(object): def productExceptSelf(self, nums): ...原创 2019-10-08 23:19:34 · 85 阅读 · 0 评论 -
Leetcode实战:292. Nim 游戏
题目:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走 1 块、2 块 还是 ...原创 2019-10-08 23:22:19 · 79 阅读 · 0 评论 -
Leetcode实战:344. 反转字符串
题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例2:输入:["H...原创 2019-10-08 23:24:48 · 90 阅读 · 0 评论 -
Leetcode实战:557. 反转字符串中的单词 III
题目:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。示例:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc" 算法实现:class Solution(object): def re...原创 2019-10-08 23:27:15 · 81 阅读 · 0 评论 -
Leetcode实战215:数组中的第K个最大元素
题目:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4算法实现:提前终止的堆排序再重建第k个堆后停止class Solution(object):#堆排...原创 2019-10-04 10:23:03 · 112 阅读 · 0 评论 -
Leetcode实战:206.反转链表
题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL算法实现:方法一:把链表转成数组,再将数组翻转,最后将数组转成链表class ListNode(object): def __init__(self, x): self.val ...原创 2019-09-29 16:42:06 · 100 阅读 · 0 评论 -
Leetcode实战169.众数
题目:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2算法实现:class Solution(object): def majorityElement(self, num...原创 2019-09-29 16:31:51 · 152 阅读 · 0 评论