摘要: 递归 广度优先搜索 深度优先搜索 二分 left, right = 0, len(array) 1 while left 阅读全文
posted @ 2019-10-09 18:19 james_cai 阅读(602) 评论(0) 推荐(0)
摘要: 关键位运算 x & ( x) 取得最低位1 x & (x 1) 去掉最低位1 阅读全文
posted @ 2019-10-08 11:30 james_cai 阅读(247) 评论(0) 推荐(0)
摘要: 什么是位运算 程序中所有数在计算机内存中都是以 二进制 的形式储存的。位运算就是直接对 整数 在内存中的二进制位进行操作。不需要转成十进制,因此处理 速度 非常快 常见操作 XOR 异或 x ^ 0 = x x ^ ~0 = ~x x ^ (~x) = 1s x ^ x = 0 a ^ b = c 阅读全文
posted @ 2019-10-08 09:44 james_cai 阅读(150) 评论(0) 推荐(0)
摘要: Trie树, 即字典树, 又称单词查找树或键树, 多叉树 基本性质 根节点不包含字符,除根节点外每一个节点都只包含一个字符 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 每个节点的所有子节点包含的字符都不相同 本质: 利用字符串之间的 公共前缀 ,将重复的前缀合并在一起 主要操 阅读全文
posted @ 2019-09-30 16:49 james_cai 阅读(275) 评论(0) 推荐(0)
摘要: ``` n = 4 # 以4皇后举例 result = [] # 放置互斥的列、左斜线、右斜线信息 cols= set() pie = set() na = set() def dfs(row, state): if row >= n: result.append(state) for col in range(n): if col in cols or row + col in pie or r 阅读全文
posted @ 2019-09-30 15:52 james_cai 阅读(386) 评论(0) 推荐(0)
摘要: 解法一: 数学归纳法 从n =1 n=2 n=x ,从小到大,发现规律。 解法二: DFS + 递归 字符号长度 2 n 暴力解法,结合栈 O(2 2n) 解法三: 解法二上改进 + 剪枝 O(2 n) 阅读全文
posted @ 2019-09-30 11:38 james_cai 阅读(104) 评论(0) 推荐(0)
摘要: 关键词 双指针 占坑思想 阅读全文
posted @ 2019-09-27 15:21 james_cai 阅读(119) 评论(0) 推荐(0)
摘要: 正确的方法 cols= 3 rows = 2 下面这种做法是错误的 这会导致 memo[0] == memo[1],改变其中一个子数组的值,另一个子数组也会一起变 阅读全文
posted @ 2019-09-26 12:03 james_cai 阅读(13410) 评论(0) 推荐(1)
摘要: 方法一,使用数组辅助 方法二,使用快慢指针 双指针 p 和 q 的话,当 q 指向末尾的 NULL, p 与 q 之间相隔的元素个数为 n 时,那么删除掉 p 的下一个指针就完成了要求。 设置虚拟节点 dummyHead 指向 head 设定双指针 p 和 q ,初始都指向虚拟节点 dummyHea 阅读全文
posted @ 2019-09-23 16:58 james_cai 阅读(168) 评论(0) 推荐(0)
摘要: 定义 堆是一个完全二叉树 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值 如何存储一个堆 完全二叉树比较适合用数组来存储 数组中下标为 i 的节点的 左子节点: i 2 的节点 右子节点: i 2 + 1 的节点 父节点: i / 2 重要操作 插入一个数据: 新插入数据放到数组 阅读全文
posted @ 2019-09-23 15:51 james_cai 阅读(1222) 评论(0) 推荐(1)