算法总结 | 青训营笔记

101 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

1.   字符串是不可变的

2.   字典中get()很快

3.   快慢指针主要处理环上的问题,比如环形链表、环形数组等;需要知道链表的长度或某个特别位置上的信息的时候。

4.   Sort排序key = lamda x (len(x),x)可以根据两个条件进行排序

5. 找序列子集用双指针就完事了

6.   找第几大的元数可以用快排的变种以及大根堆,

7.   大根堆#手撸大根堆,首先要定义一个Heapfiy函数这个函数可以对Nums里的随便一个位置的数字进行Heapfiy,然后对倒数第二排的节点每一个都进行一个heapfiy,然后再取出的过程,注意越界;heapfiy需要注意,是左右节点交换位置

8.   (sorted(dic.items(), key = lambda x:x[1], reverse = True))[:k]字典可以用来计数

9.   哈希表就可以当做桶来使用,好用多了

  1. #all in [0,left] = 0, all in [right,n-1] = 2,保证这两个就行了,分类排序关键

  2. 遇到两个维度的排序一定要记得先固定好一个维度再固定另外一个维度

  3. List有insert选项

  4. 买卖股票可以当天买当天卖。。只要比前一天大就可以卖

  5. 买卖股票经典中的经典深度搜索

  6. 看是否是递减递增函数可以用和前面几个数字比较即可,如果不想改变数组,就用波峰波谷来,如果出事是首尾,那么可以改,如果出事是中间,看你改波峰还是波谷,改波峰需要看i和i-2给不给他更改的机会,同理波谷,有机会就行

  7. 记得去看一下线段树,对于分治法很有用

  8. Ord() 函数代表可以把字母a转换为数字,chr又可以转回来

  9. 分割字符串,就满足两个条件,一个是排序好更新

19. 二分查找的使用,要有一个前提条件:要查找的数必须在一个有序数组里。

20. # 如果中间版本是坏的,那么找mid前一个,走着走着right肯定是走到了坏版本之前那个