
LeetCode
文章平均质量分 60
归忆_AC
for dream in szu...欢迎交流,若有错误可以反馈。
实验报告仅供参考!
github:https://github.com/guiyi886
联系guiyiac
展开
-
【LeetCode】打家劫舍 III(树形dp&java)
之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。对于每个节点,维护一个长度为2的状态数组表示偷和不偷当前节点时的最大值。小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为。小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7。小偷一晚能够盗取的最高金额 4 + 5 = 9。接着对每个节点的状态数组进行dp即可。,小偷能够盗取的最高金额。原创 2024-09-20 17:54:29 · 477 阅读 · 0 评论 -
【LeetCode 热题 100】最大子数组和(dp优化+前缀和)
从代码二可以看出,dp数组在每次遍历中仅仅使用了下标i和i-1的值,之前的都没有再使用过了,那其实是可以用一个变量替换dp数组的,因此有了。使用的是直观的dp,dp[i][j]表示的是下标i到j的累加值。开始时先赋对角线为初始值,再dp一遍即可,时间复杂度为为。maxNow变量本质上就是维护了一个前缀和数组,但是是一个会根据累加值而变换左右边界的前缀和数组。可以用双指针枚举左右边界,但是时间复杂度极高,为。将dp优化为一维,时间复杂度和空间复杂度均为。,但是提交后内存超限,那么需要再优化一下。原创 2024-09-11 10:30:44 · 299 阅读 · 0 评论 -
【LeetCode 热题 100】和为 K 的子数组(前缀和+哈希)
子数组是数组中元素的连续非空序列。原创 2024-09-10 22:27:41 · 330 阅读 · 0 评论 -
【LeetCode 热题 100】无重复字符的最长子串(java&滑动窗口&双指针)
利用set维护一个滑动窗口,逐个字符遍历字符串,并记录当前个数,遇到重复字符时更新最大个数。利用双指针作为滑动窗口的左右边界,对于上面的代码稍微简化一下,增加可读性。因为无重复字符的最长子串是 "abc",所以其长度为 3。因为无重复字符的最长子串是 "wke",所以其长度为 3。因为无重复字符的最长子串是 "b",所以其长度为 1。,请你找出其中不含有重复字符的。的长度,"pwke"是一个。请注意,你的答案必须是。原创 2024-08-28 18:22:12 · 326 阅读 · 0 评论 -
【LeetCode 热题 100】移动零(Java&双指针&优化)
对此可以添加一个信号值flag初始为0,找到第一个0后设置为1,再根据信号值决定是否判断left和right是否相等(不过好像判断信号值和判断这二者是否相等差别不大,只不过读一个变量和两个变量的区别,差别其实微乎其微了)。即用一个新数组表示原数组的值需要向左移多少步,可以通过遍历原数组,每找到一个0,下标为i的话,计步数组下标比i大的就全部+1。,而且有点钻题目漏洞的感觉,题目不给复制原数组的意思就是不给用新数据结构,需要对原数组进行操作,毕竟用新数组的话直接将非零值复制过去更快。,因为只遍历了一遍数组。原创 2024-08-15 02:35:35 · 451 阅读 · 1 评论 -
【LeetCode 热题 100】最长连续序列(Java&HashSet)
不过这种方法缺点很明显,若nums数组中的最大值很大,那便要开很大的数组,而且还有负数区间,最主要的是,nums数组的值的数量级达到了10的9次方,那么无法使用计数数组,会溢出。然后遍历集合,若不是连续的值的最小值则跳过,即如果有值1、2、3,若取到2、3则跳过,若取到1则接着取+1后的值(如果集合中存在),并进行计数。注意不能在编历时remove元素,因为遍历的顺序是确定的,若值被remove后再遍历到会报错,其实不止set,其他的比如list等也同理,要修改的话可以用迭代器iterator。原创 2024-08-14 02:02:02 · 201 阅读 · 0 评论 -
【LeetCode 热题 100】字母异位词分组(Java&HashMap&StringBuilder&优化)
即用一个长度为26的数组记录,每个字符串中字符次数,最后再将该数组转为字符串作为map的键(ps.忽略掉数组中次数为0的字符还可以减少一点空间复杂度)。而StringBuider和StringBuffer的话内部维护了一个byte数组,最后调用toString方法才会新建String变量赋值。首先说String,如果用String变量去+的话,每次都会创建一个新的String变量赋值。遍历字符串数组,将每一个字符串排序后,作为键值存入map,最后再转换返回。,k为单个字符串最大长度,因此总时间复杂度为。原创 2024-08-12 23:28:13 · 405 阅读 · 0 评论 -
【LeetCode 热题 100】两数之和(Java&HashMap&优化)
1.多添加几个指针,如k=i+2,q=i+3,然后同时判断,接下来一次性跳多个数,但是需要检验边界,避免k、q越界。优化思路:结合上前面的双指针,可以再减少for循环一半的时间,将时间复杂度降为O(n/2)。不过综合来看,复杂度其实并没有太多的优化,两层for循环遍历还是太消耗性能。使用HashMap存储键值对,因为是在比较数,所以将数作为键,下标作为值。2.在尾部也用一个指针,然后同时向左移动,这样第二层循环可以减少一半。而不是全部加进去再判断,这样会多会耗费O(n)的时间复杂度。,请你在该数组中找出。原创 2024-08-11 21:59:20 · 401 阅读 · 0 评论