Leecode每日刷题
文章平均质量分 56
water-之
悟已往之不谏,知来者之可追
展开
-
课程表 II:拓扑i排序
在上图中,左边这个图我们首先一个一个点的去判断他们的入度是多少,从左到右就是 (0:0),(1:1),(2:1),(3:2),然后我们先找到入度为0的点接下来删除掉这个点以及他指出去的边,然后重复这个过程,一个一个输出那些入度为0的点,这个图最终的拓扑排序就是:0,1,2,3或者0,2,1,3这样,那么知道了拓扑排序再来看这道题就很简单了。原创 2023-05-23 15:52:21 · 648 阅读 · 1 评论 -
调整数组顺序使奇数位于偶数前:双指针
Problem: 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面文章目录思路解题方法复杂度Code思路一个循环i遍历数组全部数字,然后两个指针j1和j2一个从0开始加一个从最后开始减,新开辟一个额外数组res存储最终结果,一个一个判断是奇数还是偶数,基础就res[j1++]等于它否则res[j2–]等于它。解题方法描述你的解题方法复杂度时间复杂度:添加时间复杂度, 示例: O(n)O(n)O(n)空间复杂度:添加空间复杂度, 示例: O(n)O(n)O原创 2023-05-20 18:00:02 · 535 阅读 · 0 评论 -
机器人的运动范围:DFS
然后定义dfs遍历,要额外传入一个vst[][]辨别是否已经走过,防止无限循环造成栈溢出,外面定义res一开始是1因为最开始的{0,0}格子一定会占一个结果,然后每遍历一遍+1即可原创 2023-05-20 13:17:46 · 635 阅读 · 0 评论 -
最大子数组和:动态规划
Problem: 53. 最大子数组和文章目录思路解题方法复杂度优化前:code优化后:Code,直接在原来数组基础上改动思路首先就是赋予dp[0]为nums[0],然后循环遍历数组判断dp[i-1]是否小于0,如果小于0那么dp[i]就是nums[i],负责dp[i]就是dp[i-1]+nums[i],这样就可以保证每个dp[i]都是目前序列的最大值,最后返回最大的dp[i]就好解题方法描述你的解题方法复杂度时间复杂度:添加时间复杂度, 示例: O(n)O(n)O(n)原创 2023-05-19 13:53:44 · 484 阅读 · 0 评论 -
最长重复子数组:基础dp
使用rights[n]和lefts[n]两个int数组去遍历存放每一个元素对应的下一个更小,由于最后一个没有下一个更小,所以默认赋值rights都是n,然后左边第一个继续往左同理没有下一个更小就lefts赋初值-1,然后两次遍历完后就可以一个一个求面积更新最大了原创 2023-05-17 11:18:22 · 309 阅读 · 0 评论 -
柱状图中最大的矩形:两次单调栈
使用rights[n]和lefts[n]两个int数组去遍历存放每一个元素对应的下一个更小,由于最后一个没有下一个更小,所以默认赋值rights都是n,然后左边第一个继续往左同理没有下一个更小就lefts赋初值-1,然后两次遍历完后就可以一个一个求面积更新最大了原创 2023-05-17 10:24:40 · 364 阅读 · 0 评论 -
下一个更大元素(单调栈通俗易懂)
首先我们需要去用一个map保存在nums2中每一个元素及其对应的下一个更大的元素的值例如:nums1 = [4,1,2], nums2 = [1,3,4,2]在map中会保存:(1,3),(3,4)、通过单调栈的方式实现这一需求,单调栈中存放的是数组nums2的下标值,每一次都去比较当前元素和上一个元素哪一个大,符合大就存到map里面,然后最后使用数组nums1中的值作为map的key一个一个去和map中的vale去找,能找到返回找到的,没有则是-1,因为nums1中的数字和nums中是肯定有一 一 映射的原创 2023-05-13 15:00:04 · 532 阅读 · 0 评论 -
435 无重叠区间(极简贪心+十分好理解)
我们要使用贪心的思想,先将数组以结束时间排序,我们尽可能得去优先选择更早结束的时间,这样留给后面的空间就会变大我们首先预先设定pre是intervals[0][1],表示先记录一下上一次选择的区间是谁,这里表示就是第一个数组元素的结束时间,然后定义cnt表示选择留下的区间数量,一开始是1代表当前区间,然后遍历整个数组如果说intervals[i][0]>=pre,意思就是当前区间的开始时间大于上一个区间的结束时间的话,就说明两个区间并不重叠,那么这两个区间我们就都需要保留,所以cnt++,然后我们更新pre原创 2023-05-13 11:00:42 · 634 阅读 · 0 评论 -
固定大小的滑动窗口(187. 重复的DNA序列)
Problem: 187. 重复的DNA序列文章目录思路解题方法复杂度Code思路固定大小是10的一个字串,所以只需要一个指针遍历即可,首先用occ Set集合来存储当前位置i到i+10位置的字符串,存入occ,如果存不进去就说明重复出现就将改字符串存入res中最后用一个List转换把res全部存入ans,for循环中i<length()-9就是因为下面的字符串截取是i位置到i+10位置,所以要减去9解题方法描述你的解题方法复杂度时间复杂度:添加时间复杂度, 示例:原创 2023-05-11 14:47:58 · 351 阅读 · 0 评论