无重复字符的最长子串的长度
用临时StringBuffer存储最长子串,如果遇到重复的字符,将已存储的最长子串中的重复位置前的部分全部删除,并记录此时的长度,时间复杂度是O(n),空间复杂度O(n)
1 | |
最长公共前缀
非空个位数链表相加
1 | |
盛水最多的容器
双指针,设置头指针和为指针,关键思路是找到俩端哪个高度更低,那么就挪动那个端的值,更加有可能找到更大的面积,因为面积取决于低的高度和横坐标之间的长度的乘积。
1 | |
最小覆盖字串
滑动窗口,当窗口右边界不断滑动,从而覆盖了目标子串中的所有元素时,收缩左边界,直到窗口刚刚覆盖目标字串,记录此时的窗口大小,然后将左窗口再收缩一个字符,并且更新是否覆盖字串的标记,继续滑动
1 | |
单向链表寻找中间节点
快慢双指针,快指针遍历到末尾的时候,慢指针就是到中间节点
1 | |
最多颜色的车辆
滑动窗口,每次移动窗口的时候,只需要比较新加入的元素的个数和之前记录的最多值
1 | |
数位DP
电话号码字母组合
使用回溯算法,套公式即可
1 | |
最大平分数组
1 | |
计算网络信号强度
广度优先遍历,核心是找出广度迭代方式,即遍历上下左右的坐标,以及每次将新赋值的坐标作为下一次遍历的列表
1 | |
最优高铁城市修建方案
最小生成树,在无向联通图中,权重和最小的让所有节点都链接的树就是最小生成树,n个节点,n-1条边,没有环
Prim算法:基于顶点寻找,类似贪心算法,从一个顶点出发,不断寻找对外权重最小的边,如果权重最小的边有多个,那么就任意选择一个,
Kruskal算法:将所有边按照权重排序,从小到大,依次添加,当添加一条边的时候,如果形成了环,那么就抛弃这条边,选下一个,直到选了n-1条边
并查集:
士兵过河
1 | |