剑指offer汇总

数组

调整数组顺序使奇数位于偶数前面(简单操作)

顺时针打印矩阵(顺时针螺旋打印二维数组)
把数组排成最小的数(思维排序,Comparator)

第一个只出现一次的字符(hashmap/桶计数)
数组中只出现一次的数字(HashMap)
数组中重复的数字(HashMap/桶计数)
和为S的两个数字(双指针)
扑克牌顺子(判定模拟)
构建乘积数组(前缀积、后缀积)

字符流中第一个不重复的字符(HashMap/桶计数)

模拟

把字符串转换成整数(模拟,注意防止溢出)
表示数值的字符串(判断类模拟)

数组中的查找(二分思想)

二维数组中的查找(二分思想)
旋转数组的最小数字(二分)
数字在排序数组中出现的次数(两次二分)

字符串

替换空格(StringBuffer、String语法 replace)

字符串的排列(字符串的全排列,next_permutation实现)

左旋转字符串(substring拼接)
翻转单词顺序列(split分割)

链表

从尾到头打印链表(ArrayList)
链表中倒数第k个结点(快慢指针)
反转链表(头插法)
合并两个排序的链表(尾插法)

复杂链表的复制(三步法:复制、赋值、拆链
两个链表的第一个公共结点(神仙思路)
链表中环的入口节点(数学推导+双指针)
删除链表中重复的结点(头结点+双指针)

重建二叉树(先序中序还原树)

树的子结构(递归判定)

二叉树的镜像(递归操作)

从上往下打印二叉树(层序遍历,一维的输出)

二叉搜索树的后序遍历序列(递归判定)
二叉树中和为某一值的路径(dfs,二维ArrayList及其排序)
二叉搜索树与双向链表(妙,右根左的中序遍历)

二叉树的深度(dfs)
平衡二叉树(简单判断,左右子树高度差不超过1)

二叉树的下一个结点(模拟)
对称的二叉树(递归判定)
把二叉树打印成多行(层序遍历)
按之字形顺序打印二叉树(层序遍历)
序列化二叉树(先序遍历序列化,递归反序列化)

二叉搜索树的第k个结点(中序遍历)

栈、队列

用两个栈实现队列

包含min函数的栈(栈模拟,构造一个最小值的栈)

栈的压入、弹出序列(按照弹出序列模拟栈的弹出)

堆、优先级队列、单调队列

最小的K个数(优先级队列)

数据流中的中位数(两个堆)
滑动窗口的最大值(单调队列)

排序

数组中的逆序对(归并排序)
二叉树中和为某一值的路径(dfs,二维ArrayList及其排序)
把数组排成最小的数(思维排序,Comparator)
字符串的排列(字符串的全排列,next_permutation实现)

数学、位运算、逻辑运算

斐波那契数列
跳台阶(斐波那契数列,递归)

二进制中1的个数(位运算n&(n-1))

数值的整数次方(快速幂)

整数中1出现的次数(从1到n整数中1出现的次数)
丑数(思维,枚举)

和为S的连续正数序列(数学+枚举)
求1+2+3+…+n(&&的短路原理)
不用加减乘除做加法(位运算)

剪绳子(贪心、数学、枚举)

递归、dfs

跳台阶(斐波那契数列,递归)

孩子们的游戏(圆圈中最后剩下的数) (约瑟夫环,递归)
正则表达式匹配(递归判定)
矩阵中的路径(dfs)

机器人的运动范围(dfs)

思维

变态跳台阶(思维/数学推导)
矩形覆盖(思维,斐波那契数列)

数组中出现次数超过一半的数字(思维,奇妙的思路)

dp

连续子数组的最大和(简单dp,在线算法)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值