
剑指Offer
LonelyBacer
这个作者很懒,什么都没留下…
展开
-
剑指Offer 11.旋转数组的最小数字
分析输入:一个递增数列,旋转之后的数组,输出:该数组中的最小元素思路–1不用理会输入数组的顺序,直接寻找最小的元素,然后输出。思路–2既然题目给我们的是一个旋转过后的递增数组,我们也可以旋转回去然后输出该数组中的第一个元素其实这样的操作麻烦了一下, 因为当你找到旋转的位置时,就已经找到最小的元素。(我只是想回顾一下原地旋转数组的算法) public int minArray(int[] numbers) { int min = 0 ; ..原创 2020-11-09 15:47:21 · 127 阅读 · 0 评论 -
剑指 Offer 07.重建二叉树
菜鸡刷题之路QAQ思路看到二叉树,首先要想到递归,那么我们来整理一下思路前序遍历数组中,第一个数是根节点,,找到此节点在中序数组的位置,左边为左子树,右边为右子树,依次往下进行。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { va..原创 2020-10-17 11:11:27 · 94 阅读 · 0 评论 -
剑指 Offer 09.用两个栈实现队列
这道题其实我有点蒙,只看题干信息的话,回答这个问题不难,可是我搞不清楚测试数据的输入输出QAQ思路用两个栈来实现队列功能,栈可以逆转数据的顺序,两次逆转就会变回来。准备两个栈,一个作为中间过渡栈,“入栈”;一个作为最终结果栈,“出栈”时间复杂度为O(n)空间复杂度为O(n)class CQueue { private Stack<Integer> in,out; //初始化该队列 public CQueue() { in = n..原创 2020-10-17 09:29:48 · 172 阅读 · 2 评论 -
剑指 Offer 06.从尾到头打印链表
这道题,其实说法不是那么准确,头节点一般是不存数据的,第一个存数据的应该是首元节点。在这道题目中,头结点其实存了数据思路一逆序,使用头插法将该链表逆序时间复杂度为O(n)空间复杂度为O(n)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } *..原创 2020-10-16 20:22:24 · 122 阅读 · 0 评论 -
剑指 Offer 10-11 青蛙跳台阶问题
思路首先观察该题目,整理出递归方程 f(n) = f(n-1)+f(n-2) ;这明显就符合斐波那契数列的递归方程因此我们可以使用相同的思路来解决这个问题。public int numWays(int n) { int first = 0; int second =1; int sum=0; if(n<2) return 1; for(int i=0;i<n;i++) { .原创 2020-10-14 21:45:23 · 83 阅读 · 1 评论 -
剑指 Offer10-1. 斐波那契数列
思路1 [递归]直接使用递归去思考的话,会发现时间复杂度太高了。因此可以用使用Map图去代替一个备忘录,记录0~n-1对应的斐波那契数,在后面需要使用的时候,直接调出来即可,而不用重新计算。 public int fib(int n) { return fib(n,new HashMap()); } public static int fib(int n,Map<Integer,Integer> map) { if(n<2) .原创 2020-10-13 20:20:13 · 142 阅读 · 0 评论