自己读入数据的方法:(inputhttps://blog.csdn.net/weixin_50853979/article/details/124978009  

 https://www.jianshu.com/p/f757eb7ec7a2  (sys.stdin.readline()用法)

python  map 函数的使用!!!(和lambda函数一起效果更好!!!)https://www.runoob.com/python/python-func-map.html

 区间问题的补充: https://www.nowcoder.com/questionTerminal/4edf6e6d01554870a12f218c94e8a299 (同一时间重叠最多)

1.sorted() 和sort()的用法辨析注意 Python sorted() 函数 | 菜鸟教程 (runoob.com)

3. reversed()内置函数的用法http://c.biancheng.net/view/2238.html

2. 设计sort特定的函数 lamda的用法

intervals = [[1,3],[2,6],[8,10],[15,18]]
intervals.sort(key=lambda x: x[0]) //根据x[0]进行排序

 

 3. math.comb() 组合数的实现
import math
ans = comb(m + n - 2, n - 1)

 4.[算法总结] 十大排序算法 - 知乎 (zhihu.com)

5. x//2 整除(取整)

6. count 用法

 

 7. collections.Counter()用法

主要功能:可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。

from collections import Counter

list1 = ["a", "a", "a", "b", "c", "c", "f", "g", "g", "g", "f"]
dic = Counter(list1)
print(dic)
#结果:次数是从高到低的
#Counter({'a': 3, 'g': 3, 'c': 2, 'f': 2, 'b': 1})

print(dict(dic))
#结果:按字母顺序排序的
#{'a': 3, 'b': 1, 'c': 2, 'f': 2, 'g': 3}

print(dic.items()) #dic.items()获取字典的key和value
#结果:按字母顺序排序的
#dict_items([('a', 3), ('b', 1), ('c', 2), ('f', 2), ('g', 3)])

print(dic.keys())
#结果:
#dict_keys(['a', 'b', 'c', 'f', 'g'])

print(dic.values())
#结果:
#dict_values([3, 1, 2, 2, 3])

print(sorted(dic.items(), key=lambda s: (-s[1])))
#结果:按统计次数降序排序
#[('a', 3), ('g', 3), ('c', 2), ('f', 2), ('b', 1)]

for i, v in dic.items():
    if v == 1:
        print(i)
#结果:
#b

  8. Python 按键(key)或值(value)对字典进行排序 | 菜鸟教程 (runoob.com)

  9.  (59条消息) Python反转列表的三种方式_bookaswine的博客-CSDN博客_列表反转的三种方法

 10. 将字符转换成unicode编码数字 ord()函数的使用:Python ord() 函数 | 菜鸟教程 (runoob.com)

 11. heapq 小顶堆的实现 (59条消息) Python heapq库的用法介绍_小斌哥ge的博客-CSDN博客_python heapq

     (大顶堆:把在数据进堆的时候把所有数据都去相反数就可以啦)

12. 图算法:

Floyd算法详解 通俗易懂 - 知乎 (zhihu.com) 【不能有负权环】

深入理解 Dijkstra 算法实现原理 - 简书 (jianshu.com)【不能有负权边】

(61条消息) 图解弗洛伊德算法(每一对顶点之间的最短路径问题)_弗洛伊德算法过程图解_RonzL的博客-CSDN博客

弗洛伊德算法:不能处理含有负全环的图

Dijkstra算法:不能处理有负权边的图,即要求所有边都是正数!

Bellman-Ford算法:可以处理负全环的图,检测有没有负全环 :

Bellman-Ford算法 - 知乎 (zhihu.com)

(61条消息) Bellman-Ford算法(最短路径,解决负权边,检测负环回路)+队列优化_Knock man的博客-CSDN博客

 

 eval()函数 :实现数据str变任何类型  自动识别list和dict等数据类型

13 回溯算法常用记忆搜索法@cache 和

from functools import lru_cache
@lru_cache(None)

python内置缓存lru_cache - 知乎 (zhihu.com)  注意:Python 缓存函数提升性能—functools.cache - 知乎 (zhihu.com) 【由于使用了字典存储缓存,所以该函数的固定参数和关键字参数必须是可哈希的,也就是说不能传递list等在这个递归函数里面】

 算法学习笔记(1) : 并查集 - 知乎 (zhihu.com)

 动态规划之背包问题系列 - 知乎 (zhihu.com)

背包问题力扣全集:https://leetcode.cn/problems/target-sum/solution/by-flix-rkb5/

完全背包+有序排列:https://leetcode.cn/problems/combination-sum-iv/

经典动态规划问题:高楼扔鸡蛋 - 知乎 (zhihu.com)

字符串逆转

''.join(list(reversed(s[i:j+1])))

---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()

 负数的整除和取余操作需要注意:

   Python3 的整数除法在 x 为负数时会向下(更小的负数)取

 

整(正数的时候就相当于直接切割;负数的取余 -=10 相当于去掉负号的正数的取余的结果!!!)

 

取整运算:(int 和round 都不能实现四舍五入 可以通过+0.5的操作来实现四舍五入的取整)

 

 区间计算问题:

 

 并查集的使用

 

 

 

 

class UnionFind:
    def __init__(self, n):
        self.n = n
        self.part = n
        self.parent = [x for x in range(n)]
        self.size = [1 for _ in range(n)]

    def Find(self, x: int) -> int:
        if self.parent[x] == x:
            return x
        return self.Find(self.parent[x])
    
    def Union(self, x: int, y: int) -> bool:
        root_x = self.Find(x)
        root_y = self.Find(y)
        if root_x == root_y:
            return False
        if self.size[root_x] > self.size[root_y]:
            root_x, root_y = root_y, root_x
        self.parent[root_x] = root_y
        self.size[root_y] += self.size[root_x]
        self.part -= 1
    
    def connected(self, x: int, y: int) -> bool:
        return self.Find(x) == self.Find(y)

    def get_part_size(self, x: int) -> int:
        root_x = self.Find(x)
        return self.size[root_x]

class Solution:
    def validTree(self, n: int, edges: List[List[int]]) -> bool:
        UF = UnionFind(n)
        for x, y in edges:
            if UF.Union(x, y) == False: #失败了,说明已经在一个连通域中了。再连接就是环了
                return False
        return UF.part == 1