前缀数组
差分数组
二位数组
1 顺时针旋转数组 *
对角线翻转,再左右折叠翻转 , 行变列
2 螺旋矩阵
滑动窗口
1. 最小覆盖子串 **
用两个map occur是当前窗口的已有情况, need是总的需求情况
2. s2
是否包含 s1
的排列 *
两个数组,ctn1是s1也是需求,ctn2是当前s2窗口已有的情况
固定窗口长度s1.size(), 滑动判断ctn1==ctn2
3. 438. 找到字符串中所有字母异位词 - 力扣(Leetcode)
同2
4. 剑指 Offer 48. 最长不含重复字符的子字符串 - 力扣(Leetcode)
用set记录窗口中的字符
unordered_set<char> set;
set.erase() set.insert() set.count() 判断是否有这个字符
右移每次都移到下一个是重复的为止
二分搜索
左右边界搜索
34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(Leetcode)
代码相当之妙
田忌赛马
大顶堆存储值和原始下标,一个个加入res
O(1) 时间插入、删除和获取随机元素
380. O(1) 时间插入、删除和获取随机元素 - 力扣(Leetcode)
hash存储索引,数组中交换到最后一个再删
黑名单中的随机数
710. 黑名单中的随机数 - 力扣(Leetcode)
映射黑名单的index到普通数