青大孙浩宇3.28学习笔记

双指针算法

1、指向两个序列,一个序列一个,类似于归并排序,KMP
2、指向一个序列,类似于快排

核心思想:将朴素算法O(n^2)优化到O(n)
2.(1)最长连续不重复子序列 , 这个题目的核心思想是j向前看,s[a[i]] 表示a[i]这个数在不重复子序列中出现的次数,先把数组从头开始遍历,用i指针,遍历到有重复的值了即s[a[i]] > 1了再开始对j遍历,每一步的i是加,j是减,因为i往右是指添加数,j往右是指减少数,因为i只需要走n次,j也只需要走n次,所以复杂度为O(n)
链接如下
https://www.acwing.com/problem/content/description/801/
1 . (1)、优化关键是找单调性
两个数组的题
https://www.acwing.com/problem/content/802/

双链表

1、与单链表不同的是只需要开e[N] , l[N] , r[N]这三个数组
2、只有两项操作,即在某个数的右边加入某个数,还有删除某个数
3、一开始需要将数组初始化,l[1] = 0 , r[0] = 1,即将1号节点的左边设为0号节点,将0号节点的右边设为1号节点,0和1分别表示数组的头和尾,所以说idx是从2号节点开始的
4、注意更新节点时的顺序,还有最后遍历链表的时候要从r[0]开始,从1结束
5、https://www.acwing.com/problem/content/829/

分解质因数(试除法)

1、n只有一个大于sqrt(n)的质因子
2、https://www.acwing.com/problem/content/869/

求一个数所有的约数(试除法)

1、如果i是n的约数,那么n/i也是n的约数

你可能感兴趣的:(学习日记,算法)