剑指Offer
OldManWalk
虚心若愚,求知若饥。日积跬步,以致千里。
展开
-
剑指Offer题目5:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印每个节点的值题解:想要反输出一个链表,必然会遍历整个链表,此时可以考虑使用栈来实现。当然也可以使用递归调用的方法public class PrintListNode { public void useStack(ListNode head){ Stack<ListNode> stack=new Stack<ListNode>(); while (head!=null){原创 2021-09-22 20:13:18 · 113 阅读 · 0 评论 -
剑指Offer题目7:根据遍历重构二叉树
import java.util.Arrays;public class Offertest { public class TreeNode { //二叉树的构造方法 int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } /**** * 重构二叉树 * 前序遍历: 1 2 4 7 3 5 6 8 * 中序遍历 4 7原创 2021-09-18 11:19:39 · 101 阅读 · 0 评论 -
剑指Offer题目4:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左至右递增的顺序排序,每一列都按照从上到下递增的顺序排列。请在此数组中查找确定数字N题解:思考二分查找的思想,在排序好的数列中一次性排除一半的数字,当遇到排序好的数组时,应当考虑到排序的方法来解决问题。对于此题又有点特殊,但对于一个二维数组,只有精确的找到其中心点,保证某一部分统一比中心点大,某一部分统一比中心点小,对于一个二维数组,看做一个矩阵,那么其右上方的定点一定比左边行的都大,比下方列的都小,依据此方法可以写出算法:public class Double原创 2021-09-22 19:52:24 · 101 阅读 · 0 评论 -
剑指Offer:题目3----数组中的重复数字
题目:在一个长度为n的数组里所有的数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道几个数字重复,也不知道每个数字重复了几次,请找出任意一个重复数字。答:一开始的想法是n方的双循环查找方法,一个一个找,有重复就直接返回值后来想优化为时间为n的复杂度,那么可以采用桶排序: public int solution(int[] nums){ int[] bucket=new int[nums.length]; for(int i=0;i<nums.le原创 2021-09-18 16:50:18 · 133 阅读 · 0 评论 -
剑指Offer--题目2:实现单例模式
什么是单例模式:剑指Offer我买的是C++版本的,我仿照C++写Java的示例代码单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。简单理解就是对于一个类来说,它的对象是特殊的,也就是说它的对象只能存在0和1个。方案一:只适用于单线程的写法:原创 2021-09-18 16:21:16 · 141 阅读 · 0 评论