1.组合数计算不溢出方法:https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html#%E6%80%9D%E8%B7%AF
求组合的时候,要防止两个int相乘溢出! 所以不能把算式的分子都算出来,分母都算出来再做除法。
class Solution { public: int uniquePaths(int m, int n) { long long numerator = 1; // 分子 int denominator = m - 1; // 分母 int count = m - 1; int t = m + n - 2; while (count--) { numerator *= (t--); while (denominator != 0 && numerator % denominator == 0) { numerator /= denominator; denominator--; } } return numerator; } };
动态规划没写出来的题目(代码随想录):
(1) 96. 不同的二叉搜索树
(2) 1049. 最后一块石头的重量 II
(3) 494. 目标和
(4) 377. 组合总和 Ⅳ 【排序问题】
(5) 139.单词拆分
(6) 337. 打家劫舍 III 【树形dp】
(7) 123. 买卖股票的最佳时机 III 【初始化,当天买入当天卖出情况】
(8) 1035. 不相交的线 【需要get到其本质:最大重合子序列】
(9) 115.不同的子序列 【编辑距离的问题】
(10) 516.最长回文子序列
(11) 376. 摆动序列【波峰波谷问题】
(12) 132. 分割回文串 II
(13)673. 最长递增子序列的个数 【易错】
动态规划可以解决:(1)组合问题 (2)排序问题
贪心算法没写出来的题目(代码随想录):
(1)45. 跳跃游戏 II 【细节出错】
(2)1005. K 次取反后最大化的数组和【简单的反而因为细节考虑不到】
(3)406. 根据身高重建队列【二维list 排序问题(其他常见的区间合并也是在贪心模块)】
(4)968. 监控二叉树 【树形贪心,树隔一个节点加一个标记的方法】
(5) 649. Dota2 参议院 https://programmercarl.com/0649.Dota2%E5%8F%82%E8%AE%AE%E9%99%A2.html#java
回溯算法没写出来的题目(代码随想录):
(1)131.分割回文串 【转化成回溯问题】【分割问题->组合回溯问题】
(2)93. 复原 IP 地址 【同上】
(3) 332. 重新安排行程 【欧拉/图/DFS优化问题】
(4) 37. 解数独 (纯回溯问题)
图算法(代码随想录):
332. 重新安排行程 【一笔画问题、欧拉回路问题】
753. 破解保险箱 【一笔画问题、欧拉回路问题】
127. 单词接龙 【BFS vs DFS 选择】
二叉树(代码随想录):
(1)450. 删除二叉搜索树中的节点 【删除节点问题:直接return法】
(2)669. 修剪二叉搜索树
(2)前序/后序遍历(栈迭代实现)https://www.programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%BF%AD%E4%BB%A3%E9%81%8D%E5%8E%86.html#%E5%89%8D%E5%BA%8F%E9%81%8D%E5%8E%86-%E8%BF%AD%E4%BB%A3%E6%B3%95
(3)116. 填充每个节点的下一个右侧节点指针 【巧思】
(4)968. 监控二叉树 【树形贪心,树隔一个节点加一个标记的方法】
优先队列(堆)(代码随想录):
(1)剑指 Offer 59 - I. 滑动窗口的最大值 【实现nO(logn)的复杂度】 (2)347. 前 K 个高频元素
字符串(代码随想录):
(1)剑指Offer58-II.左旋转字符串 【看解析 主要看进阶的思路 整体翻转+局部翻转】
(2)28. 找出字符串中第一个匹配项的下标 【KMP 字符串前缀和问题】 https://www.programmercarl.com/0028.%E5%AE%9E%E7%8E%B0strStr.html
(3)459.重复的子字符串【KMP 字符串前缀和问题】
(4)209.长度最小的子数组 【滑动窗口-连续子串问题】
(5)59.螺旋矩阵II 【集合开闭】
(6)二分法的相关问题 【集合开闭】【https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF】
(7)31. 下一个排列
双指针问题思路(代码随想录):
(1)https://www.programmercarl.com/0941.%E6%9C%89%E6%95%88%E7%9A%84%E5%B1%B1%E8%84%89%E6%95%B0%E7%BB%84.html#java + https://www.programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html#%E6%9A%B4%E5%8A%9B%E6%8E%92%E5%BA%8F 【数组最前面 最后面有相同性质的时候->双指针】
(2)https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html#_27-%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0 【移除元素+保持顺序】
巧思(代码随想录):
并查集(代码随想录):
(1)684. 冗余连接
(2)685. 冗余连接 II
python 负数除法/余数问题: https://blog.csdn.net/mmmmmpjih/article/details/123181326
python dict字典排序方法:https://blog.csdn.net/m0_52733659/article/details/122814795
常用的python 工具
#count() 函数的使用: list=[1,1,1,1,1,1,1,2] list.count(1) #7
#index() 查找元素index
list=[1,1,1,1,1,1,1,2]
list.index(1) #0
#map函数的用法:
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
#最大数,最小数
float("inf") float("-inf")
# sorted函数+lambda的使用
list=sorted(list,key=lambda x:(x[1],x[0])) #(先用list的第二维从小到大,再用第一维从小到大)
代码读入问题:https://blog.csdn.net/qq_23944915/article/details/109409079
---nolocal 变量的定义和说明
global nonlocal 和函数声明的顺序问题:
p=1 # global 的使用说明 def aaa(): global p # global 的使用说明 print("aaaaaaaaa") print(p) p=10 print(p) # bbb() #(bbb要想使用需要放在aaa函数声明的前面) aaa() def bbb(): tmp=[10] def ccc(): nonlocal tmp # 不需要nonlocal的使用(可以使用 可以不使用) print(tmp) ccc() bbb()