数组、链表以及字符串常见解题思路
-
数组
常见思路:排序、二分(单调数组查找的情况)、模拟、下标法(鸽笼)(看一看nums[i]的范围,如果很小就可以使用鸽笼)、前缀和(经常和单调栈一起出,解决最长最短子数组之类的问题)、双指针、滑动窗口(满足条件的子数组长度)、贪心(还是和子数组长度有很大关系)、合并区间问题
- 其中最重要的就是二分法(双指针?)
- 鸽笼法会和前缀和混在一起 用来找比自己小的元素的个数(注意nums[i]的范围)
- 合并区间问题(基本上都要排序,还有一个就是类似会议室的那种)
- 数组的贪心问题 (峰值问题 峰和谷问题)
- 给小孩发糖—》 二分法 找一个最小或最大值 满足一个条件需要挨个遍历是 可以使用二分法
-
链表
常见思路:递归/迭代 其实就是让你考虑怎么修改链表达到要求:双指针
- 合并链表 老生常谈
- 删除链表中的特定节点 老生常谈
- 翻转
- 找链表中点
-
字符串
常见思路:双指针(两个字符串比较)、dp、滑动窗口
-
翻转倒置 删除 添加 balabalabala 老生常谈
-
如果涉及String中字符的交换 可以先生成char数组
-
何为双射:即 s 的任意一个字符被 t 中唯一的字符对应,同时 t 的任意一个字符被 s中唯一的字符对应。
-
如果两个字符串 一个比一个只多了一位其他相等 可以用sum来相减少
-