随笔分类 - leetcode
摘要:746. 使用最小花费爬楼梯 思路 用动态规划的思想去做, 只要跳到倒数第二阶和倒数第一阶的时候,可以完成跳跃操作。 维护一个数组,存放跳到每阶时候的最小花费。设到i阶的时候,它有可能是从i-2阶跳上来的,也可能是i-1跳上来的,所以: f(i) = min(f(i-1)+cost[i], f(i-
阅读全文
摘要:389. 找不同 暴力法 使用map或者数组(因为只包含小写字母,大小固定,所以可以用数组)存放每个元素的出现次数,在s里面的次数+1,在t里面出现就-1,最后找到哪个字符是-1,就可以判断他是多出的字符了。 class Solution: def findTheDifference(self, s
阅读全文
摘要:714. 买卖股票的最佳时机含手续费 思路 说明: 本篇题解不是自己想出来的,出自: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/solution/jian-dan-dpm
阅读全文
摘要:290. 单词规律 思路 首先要理解清楚题目的意思,就好像孙亚龙给卢本伟起外号一样,卢本伟的外号,大家都知道:五五开 但是你不能明着叫,所以你用aab进行代替,这个题目可以说很符合这个场景了!所以现在要做的是,判断五五开是不是aab,判断aab是不是五五开。 首先我们维护2个map, 一个存放a->
阅读全文
摘要:738. 单调递增的数字 思路 咱也不管什么贪心什么的,只说几种情况: 情况1: 数字本身是递增的,那么直接return就可以了 1234 -> 1234 情况2: 数字先增后减 这个时候只需要找到第一个递减的位置,然后将其-1然后后面的位数都补为9即可 323 -> 299 情况3: 含有重复数字
阅读全文
摘要:49. 字母异位词分组 排序 遍历数组,然后对字符串进行排序,如果是异或词,那他们排序后的值也是一样,利用这一点,通过维护一个默认存放空数组的字典将他们合并到一起。 # 通俗解法 class Solution: def groupAnagrams(self, strs: List[str]) ->
阅读全文
摘要:623. 在二叉树中增加一行 思路 采用广度优先遍历的方式,同时在遍历的时候记录当前深度,如果深度与d相等,那么就改变当前层次树的结构,遍历完了之后直接return root即可。 需要注意的点是,如果深度为1,则可以直接创立一个新的节点,并把root赋值给树的left节点即可。(这是一个隐藏的坑,
阅读全文
摘要:860. 柠檬水找零 思路 模拟就行 现在假设你是小卖部老板,那么你来一张5块,你就收下,来一张10块,你的5块就-1,十块+1. 如果来的是20的,当你没有10块的时候,你就5块-3,当你有10块,你就10块-1并且5块-1 class Solution: def lemonadeChange(s
阅读全文
摘要:94. 二叉树的中序遍历 递归 递归的实现很简单,和前序遍历类似,只是改变了append到数组的顺序。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, righ
阅读全文
摘要:144. 二叉树的前序遍历 递归写法 前序遍历顺序就是 根节点->左节点->右节点 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): #
阅读全文
摘要:链接就不放了 容易被和谐 思路 贪心 只要保证每一行的数是最大的,那么总的数字就是最大的。 怎么保证每一行的数字是最大的呢,高位越大,整个数字就越大。 分3步: 把所有高位都变成1 开始遍历第2到N行,把每列里面0比较多的进行旋转,保障1比0多 遍历求和 class Solution: def ma
阅读全文
摘要:118. 杨辉三角 思路 如果你非要按照图片里的样子来看的话,会复杂一点,如果你按照这样的格式: 1 11 121 1331 14641 这样会好理解一点,每次要计算的数,都是上一行的同位置索引+上一行的上个位置的值,如果上一行的上个位置或者上一行的同样位置没有值,则只加上有值的部分。 class
阅读全文
摘要:637. 二叉树的层平均值 思路 继续采用广度优先遍历的方式,只需要稍微调整一下代码即可。可以参考: 每日一题20201204(102. 二叉树的层序遍历) # Definition for a binary tree node. # class TreeNode: # def __init__(s
阅读全文
摘要:404. 左叶子之和 思路 如果这题要求的是求所有叶子节点的和,那是不是很好做了呢? 其实这个是一样的,我们现在想要的就是求出左叶子,那么在求是否是叶子节点的时候,设立一个标志位就可以知道他是不是左叶子了。 # Definition for a binary tree node. # class T
阅读全文
摘要:257. 二叉树的所有路径 道歉声明 因为最近被一道题难住了(有序数组转二叉搜索树), 所以最近打算钻研一段时间树. 也是因为很久不复习树,所以也没什么信心接招。不管做什么,持之以恒才是最重要的! 如果,我是说如果,有人看并且看客姥爷们不开心的话,还望海涵。 思路 看题目,差不多意思就是找到最深的节
阅读全文
摘要:102. 二叉树的层序遍历 树之我见 二叉树挺有意思,希望大家都能掌握。我也在为此努力! 其实树用的还是挺多的,比如我在比较2个json的差异的时候,就涉及到遍历树,如果不知道怎么去正确遍历树,还是比较麻烦的。 还有一个应用的地方就是antd的tree,当你要用到这种组件的时候,涉及到大量的递归,用
阅读全文
摘要:204. 计数质数 思路 枚举 一般咱们用来判断一个数比如说23是否是质数,我们可以用23除以[2, 23)里面的数字,一旦有数字大于1,该数字肯定就不是质数。 但是每次除以那么多数字,其实可以简化。 想想一下,判断x是否是y的因数(也就是x是否能被y整除) 如果x是y的因素,那么y ÷ x肯定也是
阅读全文
摘要:33. 搜索旋转排序数组 思路 二分法 先对着代码进行讲解。 class Solution: def search(self, nums: List[int], target: int) -> int: # low和high分别指向数组2端 low, high = 0, len(nums)-1 wh
阅读全文
摘要:217. 存在重复元素 思路 首先,要确定一个元素是否出现多次,那么肯定O(n)的复杂度是少不了的,因为肯定需要一次遍历. 一次遍历的话,还需要记住每个数字出现的次数,所以可以考虑用hash表记录数字出现的数字。 看了题解也没有更好的解法了,暴力法更是O(n²)的复杂度,还有一种排序后遍历,复杂度也
阅读全文
摘要:183. 从不订购的客户 思路 先选出订购的顾客id,然后查询没在这批id的顾客 # Write your MySQL query statement below select Name as Customers from Customers where Id not in (select dist
阅读全文