算法题目总结

数据结构和算法

二分查找的循环、递归形式
冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序的定义,各自的复杂度比较,稳定性
实现快速排序、归并排序
二叉树的前中后序遍历和层次遍历(对应 DFS 和 BFS)
经典回溯算法——遍历红黄蓝绿所有排序方式

概念

什么是二叉搜索树,二叉搜索树构造的过程
什么是哈夫曼树
堆的概念,最大堆最小堆,堆排序
图论、权边、最小生成树
拓扑排序

数组

jz3:数组中重复的数字
jz4:二维数组中的查找
jz11:旋转数组中的最小数字
jz40:最小的 k 个数
jz42:连续子数组的最大和
jz44:数字序列中某一位的数字
jz45:把数组排成最小的数
jz57:数组中找到两个和为 s 的数字
jz63:股票的最大收益
lc48:旋转图像
lc88:合并两个有序数组
lc152:乘积最大子序列
lc238:除自身以外数组的乘积
lc283:移动零(把零移到数组末尾,保持非零元素相对位置)
lc287:寻找重复数
lc560:数组中和为k的连续子数组个数
lc581:最短无序连续子数组
转圈打印矩阵
在数组中找到出现次数大于N/K的数
最长的可整合子数组的长度
未排序正数数组中累加和为给定值的最长子数组长度
未排序数组中累加和小于或等于给定值的最长子数组长度
计算数组的小和
自然数数组的排序
奇数下标都是奇数或者偶数下标都是偶数
子数组的最大累加和问题
在数组中找到一个局部最小的位置
打印N个数组整体最大的topK
边界都是1的最大正方形大小
不包含本位置值的累乘数组
求最短通路值
数组中未出现的最小正整数
数组排序之后相邻数的最大差值
解题tips:辅助矩阵、

字符串

jz5:替换空格
jz38:打印出字符串的所有排列(回溯)
jz46:把数字翻译成字符串
jz48:最长不含重复子串的子字符串
jz50:第一个只出现一次的字符
jz58-1:翻转字符串单词顺序
jz58-2:左旋转字符串
lc5:最长回文子串
lc49:字母异位词分组
判断两个字符串是否互为旋转词
字符串的统计字符串
判断字符串数组中是否所有字符只出现了一次
在有序但有空的数组中查找字符串
数组中两个字符串的最小距离
公式字符串求值
解题tips:

链表

jz6:从尾到头打印链表
jz18:O(1)时间删除链表节点
jz22:链表中的倒数第 k 个节点
jz23:链表中环的入口节点
jz25:合并两个排序的链表
jz35:复杂链表的复制
jz52:两个链表的第一个公共节点
lc24:两两交换链表中的节点
lc206:翻转链表
判断一个链表是否为回文结构
将单向链表按某值划分成左边小,中间相等,右边大的形式
将单链表的每k个节点之间逆序
单链表的选择排序
解题tips:

jz7:重建二叉树
jz8:二叉树中序遍历下一个节点
jz26:判断一棵树是不是另一棵树的子结构
jz27:返回二叉树的镜像
jz28:判断二叉树是否对称
jz32:二叉树层次遍历按行打印
jz33:判断数组是不是二叉搜索树的后序遍历序列
jz34:二叉树中和为某一值的路径
jz36:二叉搜索树与双向链表
jz37:序列化二叉树
jz54:二叉搜索树的第 k 大节点
jz55:二叉树的深度
jz55-2:判断是否为平衡二叉树
lc105:从前序遍历和中序遍历序列构造二叉树
lc108:将有序数组转换为平衡二叉树
lc112:判断二叉树是否存在路径总和等于目标值
lc114:二叉树展开为链表
lc98:验证二叉搜索树
lc236:二叉树最小公共祖先
lc543:二叉树的直径
打印二叉树的边界节点
二叉树中找到累加和为指定值的最长路径长度
找到二叉树中最大搜索二叉子树
调整二叉树中两个错误的节点
通过有序数组生成平衡搜索二叉树
二叉树节点间的最大距离
解题tips:

哈希

lc1:两个数字的和

lc20:有效的括号
lc155:最小栈
如何仅用递归函数和栈操作逆序一个栈
用一个栈实现另一个栈的排序

队列

生成窗口最大值数组

概率

二分

lc4:寻找两个有序数组的中位数
lc69:x 的平方根
lc35:查找链表插入位置
lc34:排序数组元素的第一个和最后一个位置
lc153:查找旋转数组中的最小数

排序

快排
归并排序
利用归并排序求数组逆序数

动态规划

最长公共子序列
最长公共子串
jz10:斐波那契数列
走方格问题,返回左上角到右下角所有路径的最小路径和
jz14:剪绳子
jz47:礼物的最大价值
lc55:跳跃游戏
lc62:不同路径
lc64:最小路径和
lc72:编辑距离
lc120:三角形最小路径和
lc300:最长上升子序列
lc416:分割等和子集
回文最少分割数
正数数组的最小不可组成和

回溯算法

遍历红黄蓝绿所有排序方式
lc39:找到数组中所有和为target的组合(数字可重复)
lc22:括号生成
lc78:给定一组不含重复元素的数组,返回该数组所有可能的子集
lc90:给定一组可能含重复元素的数组,返回该数组所有可能得子集
lc216:找出所有相加和为 n 的 k 个数的组合
lc416:分割等和子集
lc473:火柴拼正方形

双指针

jz57-2:和为s的连续正数序列
lc3:无重复的最长子串
lc11:盛水最多的容器
lc15:求数组中三个数和为0的所有组合
lc75:颜色分类(荷兰国旗问题)

贪心算法

Boyer-Moore投票算法

lc169:求众数

拓扑排序

lc207:课程表(有向图中是否有环)

partition

lc205:数组中的第k个最大元素

二进制

jz15.二进制中1的个数
不用额外变量交换两个整数的值
只用位运算实现整数加减乘除
整数的二进制表达有多少个1
在其他数都出现偶数次的数组中找到出现奇数次的数
在其他数都出现k次的数组中找到只出现一次的数

大数据和空间限制

大数据和空间限制

其他

jz16:数值的整数次方
jz17:打印从1到最大的n位数
jz43:1到n整数中1出现的次数
jz60:n个骰子的点数
jz61:扑克中的顺子
jz62:圆圈中最后剩下的数字
jz64:求1+2+...+n
从5随机到7随机及其扩展
最大的leftMax与rightMax之差的绝对值
设计LRU缓存结构
调整0,x区间上的数出现的概率

你可能感兴趣的:(算法题目总结)