剑指offer
杭家y
坚持学习
联系邮箱:hg2j@qq.com
展开
-
Java实现单链表的增删改查
/** * @Description : 链表测试 * @Author : ch * @Date: 2020-11-20 */ public class LinkNode { public static void main(String[] args) { LinkedList L = new LinkedList(); L.init(); System.out.println("输入链表节点:"); Scanner scann原创 2020-11-20 11:42:13 · 230 阅读 · 0 评论 -
阿里巴巴java开发手册(泰山版)在线阅览
阿里云官网 在线阅览用IE浏览器打开链接 https://alitech-private.oss-cn-beijing.aliyuncs.com/1528269849853/Java_manual.pdf?Expires=1592993739&OSSAccessKeyId=LTAIqKGWQyF6Vd3W&Signature=Gx%2B2ZxVY9hx2yJ%2BuE%2Bb4TkEKhnM%3D 下载地址:https://102.alibaba.com/downloadFile.do?.原创 2020-06-24 17:30:27 · 349 阅读 · 0 评论 -
左程云的著作《程序员代码面试指南》.md
程序员代码面试指南原创 2020-06-08 11:54:32 · 292 阅读 · 0 评论 -
实现一棵二叉查找树的数据结构
public class Main { static class Node { public int val; public Node left; public Node right; public Node(int val){ this.val = val; } } public static void main(String[] args) { Node r原创 2020-06-08 11:06:47 · 143 阅读 · 0 评论 -
《剑指offer》思路与实现总结--Java
剑指offer所有的题目总结原创 2020-04-15 20:13:17 · 196 阅读 · 2 评论 -
[剑指Offer]10.1 斐波那契数列(思路+分析)
解题思路 如果使用递归求解,会重复计算一些子问题。例如,计算 f(10) 需要计算 f(9) 和 f(8),计算 f(9) 需要计算 f(8) 和 f(7),可以看到 f(8) 被重复计算了。 递归是将一个问题划分成多个子问题求解,动态规划也是如此,但是动态规划会把子问题的解缓存起来,从而避免重复求解子问题。 ...原创 2020-04-07 21:07:31 · 155 阅读 · 0 评论 -
[剑指Offer] 9. 用两个栈实现队列(思路+分析)
题目描述 用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 解题思路 in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,先进入的元素先退出,这就是队列的顺序。 Stack<Integer>...原创 2020-04-07 21:04:02 · 106 阅读 · 0 评论 -
[剑指Offer] 8.二叉树的下一个结点(思路+分析)
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路 ① 如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点; ② 否则,向上找第一个左链接指向的树包含该节点的祖先节点。 public TreeLinkNode GetNext(TreeLinkNode pNode) { ...原创 2020-04-07 20:59:05 · 113 阅读 · 0 评论 -
[剑指Offer] 7.重建二叉树(思路+分析)
重建二叉树 前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分为树的左子树中序遍历结果,右部分为树的右子树中序遍历的结果。 // 缓存中序遍历数组每个值对应的索引 private Map<Integer, Integer> indexForInOrders = new HashMap<>(); public TreeNode reConstruct...原创 2020-04-07 20:52:16 · 121 阅读 · 0 评论 -
[剑指Offer] 6.从尾到头打印链表(四种思路)
链表的反转打印 使用栈 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack = new Stack<>(); while (listNode != null) { stack.add(listNode...原创 2020-04-07 20:35:44 · 106 阅读 · 0 评论 -
[剑指Offer] 5.替换空格(两种思路)
替换空格描述和解析 resolution1:定义一个新的字符串,遇到了空格就添加“%20”,否则就copy原来的字符 /** * 运行时间:25ms * 占用内存:9492k * @param str * @return */ public String replaceSpace(Str...原创 2020-04-07 20:15:38 · 142 阅读 · 0 评论 -
[剑指Offer] 4.二维数组中的查找(两种思路)
二维数组中的查找 解题思路 从右上角开始查找。矩阵中的一个数,它左边的数都比它小,下边的数都比它大。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间。 复杂度:O(M + N) + O(1) public boolean Find(int target, int[][] matrix) { if (matrix == null || matrix.len...原创 2020-04-07 19:54:34 · 129 阅读 · 0 评论 -
[剑指Offer] 3.数组中重复的数字(两种思路)
NowCoder 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 Input: {2, 3, 1, 0, 2, 5} Output: 2 解题思路 要求复杂度为 O(N) + O(1),也就是时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的...原创 2020-04-06 20:57:34 · 138 阅读 · 0 评论