当前位置: 首页 > article >正文

力扣hot100二刷——哈希、双指针、滑动窗口

第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。

标志掌握程度解释办法
Fully 完全掌握看到题目就有思路,编程也很流利
⭐⭐Basically 基本掌握需要稍作思考,或者看到提示方法后能解答
⭐⭐⭐Slightly 稍微掌握需要看之前写过的代码才能想起怎么做多做
⭐⭐⭐⭐absolutely no 完全没有掌握需要看题解才知道怎么做
⭐⭐⭐⭐⭐有难度的高频题需要看题解才知道怎么做,而且过几天就忘了这道题怎么做了背背
序号掌握程度难度类型题号/题名思路/易错点新的函数
1Easy哈希1/两数之和先把每个数保存进map再进行后续操作 的做法是错误的, 因为这样的话,后面map.ContainsKey()找到的数可能是数字本身,而不是另一个数字 所以应该边遍历数组,边查找map中是否只有匹配的元素,然后再添加元素到map, 一句总结:寻找当前元素之前是否有匹配的数if(map.containsKey(target - nums[i]))
2⭐⭐Medium哈希49/字母异位词分组遍历字符串数组 对数组中的每个字符串进行内部的字母排序 相同的字母排序作为同一个键,将排序前的字符串添加进键对应的值(是一个数组)char[] ch = str.toCharArray(); Arrays.sort(ch); List strList = map.getOrDefault(s, new ArrayList()); map.put(s, strList);
3⭐⭐⭐⭐Medium哈希128/最长连续序列先遍历一边数组,将数组中元素存进set集合 再次遍历数组 每次遍历中,如果没有当前数前面的那个数,说明可以从该数开始向后寻数(用一个temp记录临时长度),直到找不到连续的数,就结束这次循环 每次遍历,更新答案。while(set.contains(num++))
4⭐⭐Easy双指针283/移动零一个指针left维护为0的位置,指针right维护不为0的位置 right指针遍历整个数组(right++) 遇到位置left上的数为0,right上的数不为0时就交换位置,left++
5Medium双指针11/盛最多水的容器比较简单 一个指针从数组最左向右移动,一个指针从数组最右向左移动 哪个指针指向的数更小,就移动哪个指针。
6⭐⭐⭐Medium双指针15/三数之和这道题的重点在于避免重复结果 先把数组排序,排序后的第一位数如果大于0,直接return 然后再遍历数组,对数组中的每个数去寻找另外两个数 遍历时,要跳过一样的数(从第二个数开始,和上一个数一样就跳过) 维护两个指针,分别指向当前数的下一个数和数组尾数 While(left < right) 中遍历寻找另外两个数,使这三个数的和为0 在寻找的同时,也一定要注意避免重复的结果,使用while循环来跳过一样的数,且要注意left < rightans.add(Arrays.asList(nums[i], nums[left], nums[right]));
7⭐⭐⭐Hard双指针42/接雨水两种解法:一种是前后缀分解,知道思路后其实很简单,另一种是单调栈 前后缀分解需要三次遍历数组。 第一次遍历数组,来维护一个保存每个当前数左边最大的数的数组 第二次遍历数组,来维护一个保存每个当前右边最大的数的数组 第三次遍历数组,来累加每个位置上的积水
8Medium滑动窗口3/无重复字符的最长字串维护一个哈希集合,保存当前子串中的字母 维护左右指针,left、right,分别指向子串头尾 右指针向右移动,同时判断新的字母是否和当前子串集合中的字母重复,如有重复,移动左指针,直到没有重复为止set.add(ch[right]); set.remove(ch[right]);
9⭐⭐Medium滑动窗口438/找到字符串中所有字母异位词维护两个大小为26的字母数组,用来保存当前遍历子串的字母数量,和目标子串的字母数量 维护left、right指针,分别指向当前遍历子串的头尾 判定完当前子串是否是目标字串的异位词后,再将左右指针右移

图片版:
在这里插入图片描述


http://www.kler.cn/a/580584.html

相关文章:

  • Python第十六课:深度学习入门 | 神经网络解密
  • PyTorch 中的混合精度训练方法,从 autocast 到 GradScalar
  • 力扣hot100_二叉树(4)_python版本
  • FastAPI 表单参数与文件上传完全指南:从基础到高级实战 [特殊字符]
  • 如何实现创意的角落切割效果:使用 CSS 和 SVG 创建时尚的网页元素
  • NLP常见任务专题介绍(1)-关系抽取(Relation Extraction, RE)任务训练模板
  • TypeError: Cannot convert object to primitive value
  • JavaScript(最后一个元素的索引就是数组的长度减 1)array.length - 1
  • Java 大视界 -- 基于 Java 的大数据实时数据处理框架性能评测与选型建议(121)
  • 请谈谈 TypeScript 中的接口(interface)和类型别名(type alias),它们的区别是什么?
  • Python | 机器学习中最常用的超参数及使用示例
  • Qt常用控件之树形QTreeWidget
  • 如何使用postman来测试接口
  • Synology 部署的 WordPress 無法升級至最新版本時,可以透過以下改良版指南進行排查和解決。
  • 雪藏HsFreezer(游戏冻结工具) v2.21
  • jsonRPC实现前后端分离
  • delphi 正则提取html中的内容
  • listen EACCES: permission denied 0.0.0.0:811
  • Ubuntu 创建systemd服务
  • LeetCode 2380 二进制字符串重新安排顺序需要的时间