剑指虐我千百遍,我待剑指如初恋 第XXX次和剑指XXX,我真的是XXX了
- 二维数组中的查找(数组)前往
- 替换空格(不使用自带函数)(字符串)前往
- 从尾到头打印链表(栈、递归)(链表)前往
- 重建二叉树(前序、中序、后序遍历特点、递归)(树)前往
- 用两个栈实现对列(入队和出队)(栈和对列)前往
- 数值的整数次方(指数为负、数值为0等边界情况,递归解法)前往
- 打印1到最大的n位数(数组模拟、全排列、递归)前往
- 在O(1)时间删除链表节点(链表空、删除节点为头节点、尾节点等)前往
- 调整数组顺序使奇数位于偶数前面(两个指针)前往
- 链表中倒数第k个结点(链表空,k小于1,k大于链表长度,两个指针)前往
- 反转链表(链表空、只有一个节点)前往
- 合并两个排序的链表(某个链表为空)前往
- 树的子结构(两步:根节点是否相等,是否是子结构)前往
- 二叉树的镜像(递归,交换左右节点)前往
- 顺时针打印数组(循环条件,每圈打印数组的边界条件)前往
- 包含min函数的栈(利用辅助栈保存最小值)前往
- 栈的压入、弹出序列(熟悉入栈和出栈的过程)前往
- 从上往下打印二叉树(对列,先进先出)前往
- 二叉搜索树的后序遍历序列(二叉搜索树:左子树比根节点小,右子树比根节点大。后序遍历数组的特点)前往
- 二叉树中和为某一值的路径(递归、栈、举例模拟计算过程)前往
- 数组中出现次数超过一半的数字(快排能改变数组O(n)、快速解法O(n))前往
- 最小的k个数(快排能改变数组O(n)、最大堆和额外k空间O(nlogk))前往
- 连续子数组的最大和(举例分析数组规律、动态规划)前往
- 从1到n整数中1出现的次数(最高位为1、其余位1、递归)前往
- 把数组排成最小的数(排序规则、快排、比较器)前往
- 丑数(数组保存已找到的数组、四个指针)前往
- 第一个只出现一次的字符(TreeMap保存字符及其出现次数、保证顺序)前往
- 数组中的逆序对(归并排序、辅助数组保存排序元素)前往
- 两个链表的第一个公共节点(辅助栈、先求长度差然后同时走直到第一次相遇)前往
- 数字在排序数组中出现的次数(二分查找得到第一个k的下标和最后一个k的下标)前往
- 二叉树的深度+是否为平衡二叉树(递归遍历)前往
- 数组中只出现一次的数字(异或、根据结果位1分成两个数组再求异或)前往
- 和为s的两个数字+和为s的连续正数序列(两个指针、首尾、首首)前往
- 翻转单词顺序VS左旋转字符串(整体旋转、部分旋转)前往
- 把字符串转换为整数(考虑字符串中存在非法字符、第一个字符为'+'或'-'或数字的情况等) 前往
- 树中两个结点的最低公共祖先(四种场景:a. 二叉搜索树->二分搜索法; b. 普通树+指向父节点指针->两个链表第一个相交的节点; c. 普通树->递归左右子树判断 d. 普通树->辅助空间、两个链表保存根节点到指定节点的路径,最后一个相同的节点就是最低公共祖先节点) 前往
- 冒泡排序(稳定;时间复杂度:最好为 O(n),最差为 O(n^2),平均为 O(n^2);空间复杂度:O(1),选择排序的一种)前往
- 选择排序(不稳定;时间复杂度:最好为 O(n^2),最差为 O(n^2),平均为 O(n^2);空间复杂度:O(1))前往
- 插入排序(稳定;时间复杂度:最好为 O(n),最差为 O(n^2),平均为 O(n^2);空间复杂度:O(1))前往
- 快速排序(不稳定;时间复杂度:最好为 O(nlogn),最差为 O(n^2),平均为 O(nlogn);空间复杂度:O(logn),基于冒泡排序 + 二分 + 递归分治)前往
- 堆排序(不稳定;时间复杂度:最好为 O(nlogn),最差为 O(nlogn),平均为 O(nlogn);空间复杂度:O(1),基于选择排序)前往
- 希尔排序(不稳定;时间复杂度:最好为 O(nlogn),最差为 O(nlogn),平均为 O(nlogn);空间复杂度:O(1),基于插入排序)前往
- 归并排序(稳定;时间复杂度:最好为 O(nlogn),最差为 O(nlogn),平均为 O(nlogn);空间复杂度:O(n),基于递归分治)前往
- 计数排序(稳定;时间复杂度:最好为 O(n+k),最差为 O(n+k),平均为 O(n+k);空间复杂度:O(n+k))前往
- 桶排序(稳定;时间复杂度:最好为 O(n),最差为 O(nlogn),平均为 O(n+c);空间复杂度:O(n+m))前往
- 基数排序(稳定;时间复杂度:最好为 O(d(n+r)),最差为 O(d(n+r)),平均为 O(d(n+r));空间复杂度:O(r))前往