每日一题
天津 唐秙
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode-设计LRU缓存结构-112
【代码】leetcode-设计LRU缓存结构-112。原创 2024-05-23 17:54:47 · 547 阅读 · 0 评论 -
leetcode-顺时针旋转矩阵-111
2.我们可以根据19这个对角线将数据进行交换,得到矩阵。3.然后将矩阵每一行的数据再翻转,得到矩阵。1.假设现在有一个矩阵。原创 2024-05-23 14:26:06 · 498 阅读 · 0 评论 -
leetcode-主持人调度(二)-110
2.如果开始的时间小于结束时间,说明目前没有空闲的人,需要增加人,如果大于等于,说明有人刚结束了主持,可以进行新的主持了,变更到下一个任务的结束的时间去安排人。1.先将开始时间和结束时间拆分放到两个数组中进行排序。原创 2024-05-23 12:15:19 · 402 阅读 · 0 评论 -
leetcode-盛水最多的容器-109
3.考虑优化高度,如果i一样,height[j] > height[j-1],说明高度要么减小要么不变,但是由于底减少,所以面积肯定降低,所以再拿height[j] > height[j-2]进行比较,只要小于height[j]的都可以跳过。1.正常用双循环外循环i从0开始,内循环从height.size()-1开始去计算每一个值是可以的,但是因为数据量太大,会超时。2.考虑到超时,需要优化一些,比如第一个选下标1,第二个选下标3和第一个选下标3,第二选择下标1是一样的,所以,内循环遍历到小于。原创 2024-05-23 11:10:57 · 601 阅读 · 0 评论 -
leecode-最长无重复子数组-108
3.然后将循环的下标i重新设置到重复元素第一次出现的位置,将map中的元素清除干净,重新往map中插入,直到循环完整个数组,返回max。1.创建一个map<int,int>,前面的是数据,后面的是上一次这个数据出现的下标,只要map中没有这个数据,就插入当前数据的下标。2.当map中出现重复的数字,说这一轮的计算已经结束,将字符串长度同max进行比较,保存长的。原创 2024-05-23 10:24:00 · 329 阅读 · 0 评论 -
leetcode-合并区间-107
1.先将Interval按照start的大小,从小到达排序,这里可以直接用sort函数,使用自定义的排序方法cmp,我们重载cmp函数,这里需要注意返回值必须要是static bool类型。2.将第一个元素插入,如果数组中的最后一个元素的end大于新元素的start,说明有重叠的部分,取两者的end大的插入,如果不重叠,则直接插入。原创 2024-05-20 14:41:31 · 141 阅读 · 0 评论 -
leetcod-验证IP地址-106
2.ipv4把字符串按照’.‘进行分割,将字符串存在数组s中,如果数组s不是4部分,说明有问题,如果s中的某一个字符串长度为0,则说明’.'号相连了,说明有问题,如果s中某一个字符串长度大于3或者小于0,说明有问题,如果s[i][0] == ‘0’ && s[i].size()!= 1,说明存在前置0有问题,将字符串转换成数字,如果没在0-255之前,说明有问题。3.ipv6如果冒号相连,有问题,如果字符串没在a~f,A ~ F,0-9只中,说明有问题。原创 2024-05-20 10:27:55 · 597 阅读 · 0 评论 -
leetcode-最长公共前缀-105
2.将每一个字符串固定下标值的字符同第一个字符串所对应的对应字符进行对比,如果都一样,把这个字符插入到最终的返回的字符串中,一共需要遍历排序后的第一个元素的长度次。1.先将字符串数组进行排序,排序后的第一个元素的长度,就是最长公共前缀可能的最大长度,后续只需要比较这一段字符串的最大公共前缀即可。原创 2024-05-14 11:07:28 · 261 阅读 · 0 评论 -
leetcode-字符串变形-104
3.以空格为区间,将区间内的字符串进行翻转,其中翻转的函数reverse()1.首先根据ASCII的规则,把字符串大小写替换,空格保持不变。2.将整个字符串进行翻转。原创 2024-05-14 10:28:39 · 298 阅读 · 0 评论 -
leetcode-最长公共子序列(二)-103
step 4:若是不相等,说明到此处为止的子串,最后一位不可能同时属于最长公共子序列,毕竟它们都不相同,因此我们考虑换成两个子问题,dp[i][j−1]dp[i][j-1]dp[i][j−1]或者dp[i−1][j]dp[i-1][j]dp[i−1][j],我们取较大的一个就可以了,由此感觉可以用递归解决。step 2:获取最长公共子序列的长度可以使用动态规划,我们以dp[i][j]dp[i][j]dp[i][j]表示在s1中以iii结尾,s2中以jjj结尾的字符串的最长公共子序列长度。原创 2024-05-13 10:58:36 · 372 阅读 · 0 评论 -
leetcode-矩阵最长递增路径-102
2.递归中需要的几个值,x和y当前结点的坐标,pre用于存储上一个结点的元素值,因为要求是路径上的元素是递增的,所以,要求上一个结点的值如果大于等于当前结点的值,作为递归的判出条件。1.通过双循环去把每一个结点作为起始点进行统计,将返回的路径长度存放在res中,取最大的res的长度。3.递归分别朝四个方向,分别是上下左右,需要注意是的是不能超二维数组的界限。原创 2024-05-08 16:40:23 · 595 阅读 · 0 评论 -
leetcode-括号生成-101
2.递归有两种,一种是增加左括号,一种是增加右括号,只要左括号的数量不超过n,就走增加左括号的递归,右括号的数量只要小于左括号的数量,并且右括号的数量少于n,就走增加右括号的逻辑。1.左括号的数量等于右括号的数量等于n作为判出条件,将结果存到res中。原创 2024-05-07 20:58:55 · 261 阅读 · 0 评论 -
leetcode-字符串的排列-100
4.特殊情况处理,如果标记数组中表示这个字符已经使用过,则跳过。如果当前字符没有使用过,但是该字符和前一个字符相同,且前一个字符已经使用过,则也跳过。防止结果中出现两次aab的结果。3.创建一个标记的数组,每次在temp中插入一个字符,便在对应的数组下标设置为1,表示该字符已经使用。2.创建临时字符串,当临时字符串temp的长度等于str的长度,作为判出条件。1.因为只涉及到字符,因此可以进行排序。原创 2024-05-07 16:29:45 · 503 阅读 · 0 评论 -
leetcode-岛屿数量-99
1.使用广度优先遍历,将数组中所有为1的元素遍历一遍,遍历过程中使用递归,讲该元素的上下左右四个方向的元素值也置为0。2.统计一共执行过多少次,次数就是岛屿数量。原创 2024-05-06 18:15:08 · 386 阅读 · 0 评论 -
leetcode-有重复数字的全排列-98
1.同【没有重复项的全排列-97】这个题一样,都是递归的题,区别在于这个可能会包含重复的数字,因此,不能只是简单的通过两个值是否相等然后用标志位标记,而是新增了一个数组,这个数组专门用于存储该元素是否被使用。2.需要特殊处理的是,类似【1,2,1】的这种的结果可能会有两个,这是因为两个1的下标不同,这时我们可以对最初的元素进行排序,如果某个元素是重复元素,并且之前已经使用过,就跳过该元素。原创 2024-05-06 16:55:12 · 413 阅读 · 0 评论 -
leetcode-没有重复项的全排列-97
3.特殊情况的处理,如果这个元素已经在n中插入过,就需要跳过该元素,对应的是题目中的不能重复,因为这里需要跳过的是最外面的for循环,因此,只能通过flag建立标记,而无法通过continue直接跳过,continue只能跳过用于做判断的内循环。2.因为这个题是属于排列,并非组合,两者的区别是排列需要把之前插入的元素在回退会去,而组合不需要,因此会存在一个pop_back()的操作。1.递归,如果num和n的元素个数一样就可以插入res中了,这个作为递归的结束条件。原创 2024-05-06 11:57:56 · 364 阅读 · 1 评论 -
leetcode-缺失的第一个正整数-96
2.创建一个对应map把元素添加进去,用map.find(res)进行查找,如果存在返回指向该元素的迭代器,否则返回map::end()。1.这里的题目要求刚好符合map和unordered_map。原创 2024-05-06 10:23:08 · 346 阅读 · 0 评论 -
leetcode-滑动窗口的最大值-95
6.第二个while循环,如果新来的这个元素的值大于之前元素的值,那么新来的这个值只要没出去,前面的比他小的值都需要被覆盖,目的就是让num[dq[i]]的值是单调递减的。7.将满足滑动窗口中最大的值,也就是存储在dq中的front的下标的值,保存到ans中,最后返回ans。6.第一个while循环,用于模拟滑动窗口的左端,如果该元素从左边已经滑出,那么需要更新双端队列的队头。2.因为这个代码是优化后的结果,第一次写如果直接写成这样着实不容易,因此,我直接讲每一行的含义。原创 2024-04-28 17:11:05 · 653 阅读 · 0 评论 -
leetcode-有效括号序列-94
2.有两个特殊情况就是字符串第一个就是后括号,这个情况本身就是不匹配的,还有一种是前面的n个字符串本身是匹配的,这时候来了个后括号,这种也是不匹配的,这里的处理方法是,如果栈为空,不管这个字符是啥,都插入进去,最后只要判断栈是否为空就行,如果第一个字符串是后括号,最后栈肯定是不为空的。1.使用栈的先进后出的思路,存储前括号,如果st中有对应的后括号与之匹配就说明没问题。原创 2024-04-28 14:34:37 · 450 阅读 · 0 评论 -
leetcode-包含min函数的栈-93
2.对于push函数,所有新来的value都需要在s1中插入,s2中,如果s2为空,那么也直接插入,因为这个值就是最小值,如果s2已经有元素,那么拿s1中最小的同新的value比较,如果value小则在s2中也插入一个value,如果原本s1中的最小值小,那么就把s2.top()在插入一份,这个的原因是为了方便实现pop(),如果s1中需要删除,那么s2也直接删除就,因为s1和s2中的元素个数一样多,这样当s1把最小值删除的时候,s2会也删除掉。3.pop函数,s1和s2正常删除。原创 2024-04-28 12:14:30 · 308 阅读 · 0 评论 -
leetcode-判断是不是二叉搜索树-92
1.因为这里要求左结点的值小于根结点的值小于右结点的值,所以当使用中序遍历的时候,应该是一个升序的。3.判断这个数组是不是升序的,如果是则是二叉搜索树,否则不是。2.创建一个数组,将中序遍历的结果插入到里面。原创 2024-04-25 21:08:38 · 430 阅读 · 0 评论 -
leetcode-二叉树的镜像-91
1.将一个结点的左右子树进行交换,如果左子树还有左右结点,就再交换左子树的左右结点,以此递归下去。1.遍历一遍二叉树,将左边的结点对应创建一个右边的结点。2.用此方法的空间复杂度是O(1),不需要创建新的结点。2.用此方法空间复杂度O(n),并不是最优。原创 2024-04-25 20:36:44 · 326 阅读 · 1 评论 -
leetcode-合并二叉树-90
1.如果两个结点都存在,就把对应的val加起来创建一个新的结点。2.如果有一个结点不存在,就用村在的那个结点。3.最后返回创建的头结点。原创 2024-04-25 20:15:46 · 208 阅读 · 0 评论 -
leetcode-二叉搜索树与双向链表-89
2.将结点以中序遍历的方式插入到数组中,注意这里是vector<TreeNode*>1.观察给的用例,本质上是把数据按照中序遍历连接起来。3.将数组中的数据连接起来。原创 2024-04-25 20:00:11 · 335 阅读 · 0 评论 -
leetcode-比较版本号-88
1.因为字符串比较大小不方便,并且因为需要去掉前导的0,这个0我们并不知道有几个,将字符串转换为数字刚好能避免。2.当判断到符号位的时候加加,跳过符号位。3.判断数字大小,来决定版本号大小。原创 2024-04-24 20:34:40 · 310 阅读 · 0 评论
分享