剑指offer
慢半拍超人
这个作者很懒,什么都没留下…
展开
-
滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5原创 2020-09-08 15:59:29 · 201 阅读 · 0 评论 -
JZ51构建乘积数组
题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。方法:根据题目描述,如果可以使用除法,就很简单。但是要求不能使用。假设:left[i] = A[0]*原创 2020-08-22 10:28:09 · 185 阅读 · 0 评论 -
JZ8青蛙跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。描述此题和斐波拉契数列做法一样。也将用三个方法来解决,从入门到会做。考察知识:递归,记忆化搜索,动态规划和动态规划的空间优化。难度:一星题解方法一:递归题目分析,这是一道经典的递推题目,你可以想如果青蛙当前在第n级台阶上,那它上一步是在哪里呢?显然,由于它可以跳1级台阶或者2级台阶,所以它上一步必定在第n-1,或者第n-2级台阶,也就是说它跳上n级台阶的跳法数是跳上原创 2020-08-21 22:02:07 · 148 阅读 · 0 评论 -
JZ7斐波那契数列(四种解法)| 图文详解
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39此题是非常经典的入门题了。我记得第一次遇到此题是在课堂上,老师拿来讲“递归”的(哈哈哈)。同样的类型的题还有兔子繁殖的问题。大同小异。此题将用三个方法来解决,从入门到会做。考察知识:递归,记忆化搜索,动态规划和动态规划的空间优化。难度:一星方法一:递归题目分析,斐波那契数列公式为:f[n] = f[n-1] + f[n-2], 初始值f[0]=0, f[1]=原创 2020-08-21 16:36:14 · 3126 阅读 · 0 评论 -
JZ5用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型当插入时,直接插入 stack1当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 stack2,再弹出 stack2 栈顶元素import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer&g原创 2020-08-21 16:02:02 · 171 阅读 · 0 评论 -
JZ57二叉树的下一个结点
题解题目描述:给你一颗二叉树的一个结点,返回中序遍历顺序中这个结点的下一结点。二叉树不仅有左右孩子指针,还有指向父亲结点的指针。Q1:首先问你一个问题,如果这道题出现在笔试题中,你会用什么方法做?如果出现在面试题中呢?A1:我想你肯定有点疑惑,同一道题为什么还分出现在笔试题中还是面试题中呢?很显然,笔试题中只要能过就好,设计的算法丑点,慢点也无所畏,不一定需要最优解法,当然前提是能够通过。而面试中就不一样了,显然面试官希望听到最优解法。方法一:暴力解法(还原二叉树)分析既然给了二叉树的某个结点原创 2020-08-21 15:37:27 · 162 阅读 · 0 评论 -
JZ3从尾到头打印链表
一、非递归分析listNode 是链表,只能从头遍历到尾,但是输出却要求从尾到头,这是典型的"先进后出",我们可以想到栈!ArrayList 中有个方法是 add(index,value),可以指定 index 位置插入 value 值所以我们在遍历 listNode 的同时将每个遇到的值插入到 list 的 0 位置,最后输出 listNode 即可得到逆序链表代码import java.util.*;public class Solution { public ArrayLis原创 2020-08-21 10:41:31 · 183 阅读 · 0 评论 -
数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。二、哈希表分析利用 HashSet 解决,从头到尾扫描数组,每次扫描到一个数,判断当前数是否存在 HashSet 中,如果存在,则重复,对 duplication 赋值返回,否则将该数加入到 HashSet 中代码impor原创 2020-08-18 14:48:27 · 126 阅读 · 0 评论 -
JZ20包含min函数的栈
文章目录JZ20包含min函数的栈思路方法一方法二JZ20包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。思路看到这个问题, 我们最开始可能会想, 添加一个成员变量用于保存最小元素, 每次压栈时如果压栈元素比当前最小元素更小, 就更新最小元素.但是这样会有一个问题, 如果最小元素被弹出了呢, 如何获得下一个最小元素呢? 分析到这原创 2020-06-10 20:41:11 · 187 阅读 · 0 评论