摘要:
### 一. 集合运算基础 使用二进制表示集合的选取状态 同样我们能快速的运用二进制实现一些遍历、交集、补集的操作 也能使用二进制存储对应状态,实现动态规划和剪枝 ####1. 集合与集合运算 ``` A&B //求集合交集操作 A|B //求集合并集操作 A&∼B //做差,在集合A中剔除B的元素 阅读全文
摘要:
``` INT_MAX = 2**63-1 = sys.maxsize #最大整型 INT_MIN = -2**63 = -sys.maxsize -1 #最小整型 float('inf') #比其它数都大的数 float('-inf') #比其它数都小的数 ``` 遍历枚举 ``` for val 阅读全文
摘要:
给你一个整数数组 nums 和两个整数:left 及 right 找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数 ###1. 遍历区间右端点 + 同时记录满足条件的左边点位 数组中不能含有大于 right的元素, 且至少含有一个 阅读全文
摘要:
给你两个长度为 n 、下标从 0 开始的整数数组 nums1 和 nums2 另给你一个下标从 1 开始的二维数组 queries ,其中 queries[i] = [xi, yi] 对于第 i 个查询,在所有满足 nums1[j] >= xi 且 nums2[j] >= yi 的下标 j (0 贪 阅读全文
摘要:
给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出 其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。 树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点 返回数的第k个祖先节点,如果不存在返回-1 ###1. 倍增查找 阅读全文
摘要:
给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示,节点 i 到节点 edges[i] 之间有一条有向边。 如果节点 i 没有出边,那么 edges[i] == -1 。 1. 深度优先搜 阅读全文
摘要:
好人:该角色只说真话。 坏人:该角色可能说真话,也可能说假话 每个人都有对其他人的描述,存为一个n×n的二维矩阵 0认为是坏人,1认为是好人,2不做评价 返回最大好人数目 ###1. 暴力列举 + 二进制状态位 基于矛盾判断该状态是否有效 ``` class Solution { public: i 阅读全文
摘要:
给你两个长度为 n 的字符串 s1 和 s2 ,以及一个字符串 evil 。请你返回 好字符串 的数目。 好字符串 的定义为:它的长度为 n ,字典序大于等于 s1 ,字典序小于等于 s2 ,且不包含 evil 为子字符串 ###一. 数位dp + KMP算法 ``` const int MOD = 阅读全文
摘要:
用边长为整数的正方形填充m×n的平面空间 返回最少的正方形 ###1. 纯纯的暴力 不存在某种贪心和动态规划可以完成状态的转移 只能暴力在每一个位置填充每一种情况的正方形 ``` class Solution { public: int ans; int tilingRectangle(int n, 阅读全文