- 博客(4)
- 收藏
- 关注
原创 LeetCode刷题 31.下一个排列
31. 下一个排列解析:分析, 找到下一个字典序最大排列,那么我们应该从低数位开始修改,例如对于,长度为6的排列,若我们能让它的最低两位排列变大一些,这个排列整体也变大了,修改更高位的排列只能比修改最低两位的排列要大。找到需要修改的最低位排列,如果一个低位排列是单调非增的,那么无法将它变得更大,因此从尾部开始扫描,找到的第一个不是单调非增的低位排列就是我们需要修改的数a[i]a[i]a[i]在修改时,我们应该利用在上一次找到的单调非增排列a[i+1:]a[i+1:]a[i+1:]中选择恰好大于
2021-11-17 15:49:11 80
原创 Leetcode 318最大单词长度乘积
318. 最大单词长度乘积解析:首先可以改进字符串是否包含公共字母的比较,这里可以通过位运算优化,利用位运算为每个字符串生成state,有哪个字母,对应位就置为1,反之为0。在判断时,只需要对state做与运算即可,若为0则不包含重复字母。其次可以在比较次数上优化,这里我没想出来,官方是只保存具有相同state的字符串的length最大值,在此基础上应该还可以对state做筛选,不过会带来额外开销。code:class Solution {public: int maxProduct(
2021-11-17 11:26:00 637
原创 LeetCode刷题-319.灯泡开关
319.灯泡开关解析:初看这道题,会很直观地想到动态规划、模拟等解法,但是由于n<=109n<=10^9n<=109,模拟显然会超时,动态规划又没有explict equation,故而重新思考。在这里每个灯泡间的状态实际上是独立的,它们最后的状态只取决于自己被改变的次数,根据每次操作的性质,我们可以知道,第iii个灯泡一共会被操作f(i)f(i)f(i)次,其中f(i)f(i)f(i)表示iii的因数个数,那么统计每一个灯泡的因数个数即可得到当前灯泡的开关状态。但是统计因数个数
2021-11-15 10:35:00 302
原创 LeetCode00001-00019
2021/08/02Add Two Numbers解析: 非常简单的列表相加问题,一开始弄错为反向列表相加了,绕了点路子key points:每次相加之后要把进位保留下来考虑corner case,即最后一个进位为0时需要删除最后一个节点,不为零时需要保留最后一个节点活用3元表达式缩减代码my answerclass Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l
2021-08-13 10:00:48 102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人