- 博客(19)
- 收藏
- 关注
原创 每日一题_371. 两整数之和
每日一题_371. 两整数之和题目:题意分析:今天的每日一题让我们不使用‘+’ ,‘-’ 实现加法,我瞬间就笑了,不用’+’,’-’,难道我还不能用’+=’ 吗?我还可以用sum。哈哈哈哈,不开玩笑了,这题让我想起CSAPP第一章的课后习题,就是用位运算来实现加法。算法:位运算无非就这么几个:与,或, 非, 异或。位运算完成加法实际上就是将十进制的加法转化成用二进制完成,和十进制加法类似,需要考虑进位的问题,我们观察加法运算在二进制每一位上的特征,每一位上相加得是全0为0,有1为1,全1也为0
2021-09-26 11:29:39 165
原创 每日一题_583. 两个字符串的删除操作
每日一题_583. 两个字符串的删除操作leetcode题目:题意分析:题目一开始看成了编辑距离,仔细看看并不是。题目是说两个字符串只能通过删除操作变成一样的字符串,那么其实就是最后一样的字符串一定是两个字符串的公共子序列,既然要求最少的删除次数,那么其实只要公共子序列越长,那么需要的删除次数就越少,所以题目就转换成求两个字符串的最长公共子序列了。求公共子序列可谓是经典中的经典了,直接上动态规划就行了。代码:class Solution {public: int minDistanc
2021-09-25 12:11:11 211
原创 每日一题_430. 扁平化多级双向链表
每日一题_430. 扁平化多级双向链表leetcode_430题目:题意分析:这一题引入了一个新的概念,叫多级双向链表,听起来高大上,其实就是其中的某个节点会指向一条新的双向链表的头节点,然后题目的目的就是让我们把这些链表给合并成同一条链表。所以这个所谓的多级双向链表,其实就是一个图,或者更类似一棵树,让我们将其变成一条链表。大概明白了题目的意思,看成一颗树之后,其实用深搜(前序遍历)就能解决了,对于一个新的节点,如果这个节点没有指向一个新的链表,那么就正常按照原样就行,如果指向了一条新的链表,
2021-09-24 17:58:08 156
原创 每日一题_326. 3的幂
每日一题_326. 3的幂leetcode_326题目:题意分析:今天的每日一题是个简单题,就是让我们判断一个数是不是3的幂。算法:一个简单的不能再简单的办法就是直接循环去除以3,如果能除的尽的话,那么就是3的幂如果不用循环的话,就得稍微思考一下其中的性质。一个数如果是3的幂,那么它必然是较大的3的幂的约数,基于这一点,我们考虑这一题,因为是int,所以最大的3的幂的数就是319=11622614673^{19} = 1162261467319=1162261467,那么只需要判断题给的数
2021-09-23 12:34:59 173
原创 每日一题_725. 分隔链表
每日一题_725. 分隔链表题目:题意分析:今天的每日一题,感觉也蛮友好的,题目的意思是有一个链表,然后给定一个是数字k,然后让我们把这个链表尽可能的平均分为k个部分,但可想而知,只有当链表的长度刚好整除k的时候,才能均分,这就是说当链表的长度不能整除k时,多出来的节点就得被均摊。因此总共有k个子链表,其中quotient=n/kremainder=n%kquotient = n / k \quad \quad remainder = n \% k quotient=n/kremainder=n
2021-09-22 21:27:04 72
原创 每日一题_58. 最后一个单词的长度
每日一题_58. 最后一个单词的长度题目:题意分析:可能今天是中秋节,送道简单题给大家放假,题目求最后一个单词的长度,python写可能最简单了一行解决: return len(s.rstrip().split(" ")[-1])c++的话,因为没有现成的split函数,我们当然可以模仿着实现,但是还是算了吧(偷懒),直接遍历就得了,遇到非空格,加上就行,遇到空格,就更新一遍置空。总之就是简单。代码:class Solution {public: int lengthOfLast
2021-09-21 13:56:48 76
原创 每日一题_673. 最长递增子序列的个数
每日一题_673. 最长递增子序列的个数题目:题意分析:这道题和LeetCode_300很相像,300是让我们求一个数组的最长递增子序列,只要求一个就行了,这一道题则是让我们求一个数组中最长递增子序列的个数。题意简单明了。算法:动态规划:首先如果做过第300题的话,其实第一想到的就是动态规划了,因为这非常符合动态规划的特征,求一个数组或者字符串的某个值比如最长最多或者最小的某个性质,当想不到什么其他的办法的时候,我们的思路就可以朝着动态规划的方向去靠。来看这一题,题目是一个数组,求得性质是数组
2021-09-20 18:30:04 455
原创 每日一题_650. 只有两个键的键盘
每日一题_650. 只有两个键的键盘leetcode题目:题意分析:题目的意思是说,初始情况下只有一个A的情况下,如何能够得到n个A,其中能用的操作只有复制和粘贴,并且粘贴只能粘贴最近一次copy的内容。动态规划:首先,我们可以先尝试一些较小的数,体会一下其中的规律,我尝试了一下11以内,然后首先发现所有的素数的操作次数都是自身的n,然后比如8,我们只需要在有4个A的时候,复制一下再粘贴,那么就能得到8个A,为了方便我们的描述,我们设dp[i]表示得到i个A所需要的操作次数,那么dp[8]=d
2021-09-19 16:49:14 143
原创 每日一题_292.Nim 游戏
每日一题_292.Nim 游戏leetcode_292题目:题意分析:让我们考虑一些小例子。显而易见的是,如果石头堆中只有一块、两块、或是三块石头,那么在你的回合,你就可以把全部石子拿走,从而在游戏中取胜;如果堆中恰好有四块石头,你就会失败。因为在这种情况下不管你取走多少石头,总会为你的对手留下几块,他可以将剩余的石头全部取完,从而他可以在游戏中打败你。因此,要想获胜,在你的回合中,必须避免石头堆中的石子数为 4的情况。我们继续推理,假设当前堆里只剩下五块、六块、或是七块石头,你可以控制自己拿取
2021-09-18 12:39:51 111
原创 每日一题_36. 有效的数独
每日一题_36. 有效的数独leetcode_36题目:题意分析:这一题是一个常规题吧,就是让我们判断一个数独题目是不是正确的,但是注意这不是让我们判断数独本省有没有解,只是让我们判断这个数独题目本身满不满足数独的条件。这道题没什么太多的算法,就是有两个技巧吧,一个是记录每行每列九宫格里字符出现的个数,因为范围固定在字符1-9,因此可以用一个int数组来当作hash表,键值就是ch(char) - ‘0’。另一个处理的就是遍历九宫格了,官方答案给的是一次遍历,但是我一开始想的就是分开遍历,在遍
2021-09-17 12:52:06 236
转载 每日一题_212. 单词搜索 II
每日一题_212. 单词搜索 IIleetcode_212算法:回溯 + 字典树预备知识前缀树(字典树)是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。前缀树可以用 O(|S|) 的时间复杂度完成如下操作,其中 |S|是插入字符串或查询前缀的长度:向前缀树中插入字符串 word;查询前缀串 prefix 是否为已经插入到前缀树中的任意一个字符串 word的前缀;前缀树的实现可以参考「208. 实现 Trie (前缀树) 的官方题解」。思路和算法根据题意,我们需要逐个遍历二维网格
2021-09-16 21:20:03 90
原创 每日一题_162. 寻找峰值
每日一题_162. 寻找峰值leetcode162题目:题意分析:这道题题意很简单,就是让我们找一个数组先上升后下降的那个拐点,拐点的特征是他比左边和右边的值严格大,加上所有元素不相等,两边都是负无穷,那么就肯定存在一个峰值,抓住这个特点,其实遍历一遍就能找到峰值,但是,题目让我们实现log(n)。算法:二分其实题目说要求log(n),对于一个一维数组,要想log(n),其实就是在提醒我们要二分,这里要提到之前在y总的算法基础课上学到的二分你,以前觉得二分的条件是需要单调性,因为之前一般做的时
2021-09-15 11:26:41 342
原创 每日一题_524. 通过删除字母匹配到字典里最长单词
每日一题_524. 通过删除字母匹配到字典里最长单词leetcode题目:题意分析:题目的意思是给一个字符串,和一个单词数组,删除字母匹配的单词,实际上就是单词是字符串的子序列。那么题目就是问单词数组里面,是字符串的的子序列的最长的那个单词的长度,如果有多个最长的,去取字典序最小的那个。算法:从以上分析,题目被拆解成两个部分完成,首先,我们得判断一个单词是不是字符串的子序列,判断是否是子序列用双指针即可,如果是的话,长度取max,这里注意的是长度相等的时候,得看字典序,所以实现一个字典序比较的
2021-09-14 21:23:48 130
原创 C++ size()返回的是无符号整型!!!!
今天做算法题的时候,出现了一个bug,找了一年没有找到,最后发现一个if死活进不去:最后才意识到size()返回的是无符号整形,这样,-1就是ffffffff,那肯定是最大的,必然就不去找个if。改成这样就对了:或者max_len变成0...
2021-09-14 13:09:29 422
原创 每日一题_447.回旋镖的数量
每日一题_447.回旋镖的数量leetcode 447题目:题意分析:今天的题目比较简单,没有复杂的算法,主要是用空间换时间。该题是给我们平面上一系列的点,这些点都在整数格点上,然后当其中一个点到另外两个不重复的点的欧几里得距离相等,那么这三个点就构成一个回旋镖,其实就是类似一个 “ V ”行,所以叫 “ 回旋镖 ” 嘛。而题目就是让我们求平面上所有的点中,构成的回旋镖的个数。算法(哈希表):首先这道题如果暴力枚举的话,因为是三个点,所以是三层循环,n最大是500,那么500^3 = 1.25
2021-09-13 12:52:48 170
原创 每日一题_678.有效的括号字符串
每日一题_678.有效的括号字符串leetcode_678题目:题意分析:该题是一个判断括号字符串是否合法的经典题,但和之前的是否合法字符串不同的是,这里多了一个’ * ', 这个星号视作万能字符,既可以当作左括号,又可以当作右括号,也可以为空。模拟:首先想的方法肯定是用栈模拟了,但需要注意的是,因为星号的存在,直接一个栈模拟肯定不行,因为,当一个右括号来的时候不知道该不该用星号匹配,因为有可能这个星号在这个字符串里其实是被当作空。所以问题就出在这里的星号和括号的顺序,可以这么想,因为星号是万
2021-09-12 17:19:33 128
原创 每日一题_600. 不含连续1的非负整数
每日一题_600. 不含连续1的非负整数leetcode_600题目题意分析首先读题,意思是说,给定一个整数n,在所有0~n的这么多整数里,有多少个整数的二进制的表示里没有连续的1,比如示例里5:101,就满足条件,而3:11就不满足。其中n最大是1e9,如果暴力检查每个数字,肯定复杂度要爆炸。所以需要仔细考察题意,其实我最先想到的就是一共在小于n的位数的这么多数位上,放0和1,然后要满足题目的条件不能有连续的1,想到这里我立马写了个深搜,然后剪枝的话就是一旦有连续的1或者大于n就立即停止继续向
2021-09-12 01:51:49 180
原创 每日一题_1894. 找到需要补充粉笔的学生编号
每日一题_1894. 找到需要补充粉笔的学生编号leetcode_1894题意分析今天教师节,然后leetcode就很应景的整了个这个题通过读题,该题的意思是说,有n个学生,这n个学生轮流上黑板做题(确定做题?这么多粉笔都可以把黑板涂满了),做题会用粉笔,每个学生上去做题用的粉笔不一样,但都是定值,用一个数组来表示,然后粉笔盒里有k支粉笔。这n个学生就一直轮流上去做题,直到把粉笔盒里的k支粉笔用完,然后轮到最后的那个学生会因为粉笔不够而没法做题,题目就是让我们返回这个最后的学生的编号。分析完题意
2021-09-10 21:57:08 110
原创 深度学习Debug
tensorflow.python.framework.errors_impl.InvalidArgumentError这个错误一般都是参数配置出现了错误,比如词表大小设置的是1000,但读入的词表超过了1000,那么就会报这个错误,对于我这次碰到的错误如下:这个错误是我在跑一个图神经网络是遇到的,因为我设置节点的数量小于了实际读入的数量,所以报错。在读其他的博客时候,也有各种各样的错误,但都是参数的原因,大部分不是代码的原因。...
2021-09-10 21:33:43 245
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人