
力扣
爱吃肉爱睡觉的Esther
这个作者很懒,什么都没留下…
展开
-
Leetcode-talk37 去除重复字符
给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入: "bcabc"输出: "abc"示例 2:输入: "cbacdcbc"输出: "acdb"关键思想:逐个找字典最小的字母思路一:递归class Solution: def removeDuplicateLe...原创 2020-04-09 22:38:54 · 140 阅读 · 0 评论 -
Leetcode-talk36 最长公共子序列
做了几个dp的题之后,总结了dp需要注意的几个要素:1、 明确dp二维数组表示的含义2、base case3、状态的转移:对于回文/LCS之类的问题则是考虑当前字串和已经计算过的子串之间的关系4、由状态的转移来确定 loop的边界5、 由loop的边界打出表格 可得出最后一个dp的状态值,即结果。最长公共子序列给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序...原创 2020-04-08 08:31:07 · 140 阅读 · 0 评论 -
Leetcode-talk35 编辑距离
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除...原创 2020-04-06 23:18:36 · 95 阅读 · 0 评论 -
Leetcode-talk34 最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路很清晰,既然要求到达右下角的最小路径和,那么可依次求出每个点的最小路径和,用原来的数组保存。先...原创 2020-04-04 22:21:54 · 167 阅读 · 0 评论 -
Leetcode-talk33 最长有效括号
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"思路一:栈+排序括号匹配,第一时间想到用栈进行匹配,保存下可以匹配的索引下标。然后将匹配索引排序,找到最长连续子序列。1.初试化栈st...原创 2020-04-02 22:10:02 · 109 阅读 · 0 评论 -
Leetcode-talk32 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?**注意:**给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶...原创 2020-04-01 22:40:19 · 116 阅读 · 0 评论 -
Leetcode-talk31 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解法1 动态规划于是我们把目光落到动态规划上面来,首先需要把这个问题分...原创 2020-03-31 22:51:03 · 109 阅读 · 0 评论 -
Leetcode-talk30 通配符匹配
思路:思路一: 利用两个指针进行遍历。在代码里解释.时间复杂度为:O(mn)思路二: 动态规划dp[i][j]表示s到i位置,p到j位置是否匹配!初始化:1.dp[0][0]:什么都没有,所以为true2.第一行dp[0][j],换句话说,s为空,与p匹配,所以只要p开始为才为true3. 第一列dp[i][0],当然全部为False动态方程:1.如果(s[i] == p[j...原创 2020-03-30 17:01:36 · 122 阅读 · 0 评论 -
Leetcode-talk29 加油站
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中...原创 2020-03-29 16:47:28 · 95 阅读 · 0 评论 -
Leetcode-talk28 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索...原创 2020-03-28 22:07:46 · 126 阅读 · 0 评论 -
Leetcode-talk27分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小...原创 2020-03-27 21:28:01 · 95 阅读 · 0 评论 -
Leetcode-talk26判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = "...原创 2020-03-26 16:41:02 · 71 阅读 · 0 评论 -
Leetcode-talk25买卖股票的最佳时间II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获...原创 2020-03-25 22:07:11 · 82 阅读 · 0 评论 -
Leetcode-talk24恢复二叉搜索树
二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例1:输入: [1,3,null,null,2] 1 / 3 \ 2输出: [3,1,null,null,2] 3 / 1 \ 2示例2:输入: [3,1,4,null,null,2] 3 / \1 4 / 2输出: [2,1,4,...原创 2020-03-24 22:59:33 · 89 阅读 · 0 评论 -
Leetcode-talk23不同的二叉搜索树
给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 ...原创 2020-03-23 17:33:23 · 81 阅读 · 0 评论 -
Leetcode-talk22二叉树的中序遍历
给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]官方题解中介绍了三种方法来完成树的中序遍历,包括:1.递归2.借助栈的迭代方3.莫里斯遍历在树的深度优先遍历中(包括前序、中序、后序遍历),递归方法最为直观易懂,但考虑到效率,我们通常不推荐使用递归。栈迭代方法虽然提高了效率,但...原创 2020-03-22 10:28:51 · 132 阅读 · 0 评论 -
Leetcode-talk21二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7思路标签:DFS找出终止条件:当前节点为空找出返回值:节点为空时说明高度为0,所以返回0;节点不为空时则分别求左...原创 2020-03-21 17:59:07 · 102 阅读 · 0 评论 -
Leetcode-talk20对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3思路:递归结束条件:都为空指针则返回 true只有一...原创 2020-03-20 22:28:30 · 85 阅读 · 0 评论 -
Leetcode-talk19相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 ...原创 2020-03-19 23:05:36 · 83 阅读 · 0 评论 -
Leetcode-talk18正则表达式匹配
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "aa"p = ...原创 2020-03-18 18:14:37 · 95 阅读 · 0 评论 -
Leetcode-talk17最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路:三种思路:思路 1:把每个字母当成回文串的中心这里要考虑两种情况,回文串的长度为奇数或者偶数情况。思路 2: 把每个字母当成回文串的结束思路...原创 2020-03-17 22:15:02 · 100 阅读 · 0 评论 -
Leetcode-talk16无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所...原创 2020-03-16 16:08:00 · 74 阅读 · 0 评论 -
Leetcode-talk15有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "...原创 2020-03-15 11:36:02 · 86 阅读 · 0 评论 -
Leetcode-talk14最长公共前缀
写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。【法一】python水平扫描法解题思路,很容易想到的是我们...原创 2020-03-14 11:33:10 · 116 阅读 · 0 评论 -
Leetcode-talk13罗马数字转整数
马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 ...原创 2020-03-13 22:09:07 · 202 阅读 · 0 评论 -
Leetcode-talk12合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6法一:分治法想法 & 算法1.将k 个链表配对并将同一对中的链表合并。2.第一轮合并以后,k 个链表被合并...原创 2020-03-12 18:52:34 · 102 阅读 · 0 评论 -
Leetcode-talk11删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.法一:双指针遍历我们可以设想假设设定了双指针 p 和 q 的话,当 q 指向末尾的 NULL,p 与 q 之间相隔的元素个数为 n 时,那么删除掉 p 的...原创 2020-03-11 11:22:02 · 73 阅读 · 0 评论 -
Leetcode-talk10两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...原创 2020-03-10 22:12:07 · 111 阅读 · 0 评论 -
Leetcode-talk09环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true...原创 2020-03-09 11:12:59 · 103 阅读 · 0 评论 -
Leetcode-talk08删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3Java:public class Solution { public ListNode deleteDuplicates(ListNode ...原创 2020-03-08 11:03:51 · 101 阅读 · 0 评论 -
Leetcode-talk07合并两个有序链表
【题目描述】将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4【法一】好理解又效率高思路:标签:链表、递归这道题可以使用递归实现,新链表也不需要构造新节点,我们下面列举递归三个要素终止条件:两条链表分别名...原创 2020-03-07 10:38:53 · 124 阅读 · 0 评论 -
Leetcode-talk06买股票的最佳时间iiI
参考别人优秀的想法一个通用方法团灭 6 道股票问题,先解决四道题。这 6 道股票买卖问题是有共性的,我们通过对第四题(限制最大交易次数为 k)的分析一道一道解决。因为第四题是一个最泛化的形式,其他的问题都是这个形式的简化。第一题是只进行一次交易,相当于 k = 1;第二题是不限交易次数,相当于 k = +infinity(正无穷);第三题是只进行 2 次交易,相当于 k = 2;剩下...原创 2020-03-06 22:51:02 · 118 阅读 · 0 评论 -
Leetcode-talk05最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).Python:排序+双指针算法流程:特判...原创 2020-03-05 10:20:25 · 91 阅读 · 0 评论 -
Leetcode-talk04三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。【示例】给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]python:class...原创 2020-03-04 11:27:29 · 182 阅读 · 0 评论 -
Leetcode-talk03移除元素
3.移除元素1)给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。2)不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。3)元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。【示例】给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且...原创 2020-03-03 09:55:28 · 129 阅读 · 0 评论 -
Leetcode-Task02. 删除排序数组中的重复项
(1)示例删除多余元素class Solution: def removeDuplicates(self, nums: List[int]) -> int: nums = [0,0,1,1,1,2,2,3,3,4] for i in range(len(nums)-1): for j in nums[i+1: ]: ...原创 2020-03-02 10:45:08 · 106 阅读 · 0 评论 -
Leetcode-Task01两数相加
两数之和(1)迭代法:class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: num_index = {} for index, num in enumerate(nums): if target - num in num_in...原创 2020-03-01 11:18:18 · 109 阅读 · 0 评论