剑指offer二刷
却顾所来径
当你老了,回顾一生,就会发觉:什么时候出国读书、什么时候决定做第一份职业、何时选定了对象而恋爱、什么时候结婚,其实都是命运的巨变。只是当时站在三岔路口,眼见风云千樯,你作出抉择的那一日,在日记上,相当的沉闷和平凡,当时还以为是生命中普通的一天。
展开
-
剑指offer03 从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 代码一、 自己写的:先反转链表,接着从前向后打印。时间复杂度O(n) public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ListNode ...原创 2019-04-04 20:26:07 · 69 阅读 · 0 评论 -
剑指offer14 链表中倒数第k个结点(简洁)
题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路: 方法一、最容易想到的方法: 第一次遍历链表确定链表长度n,第二次遍历链表得到n-k+1位置的元素。 时间复杂度:O(n),准确点是n+k 代码:代码很简单,略。 方法二、设置两个指针 第一个指针移动到第k个节点,紧接着第二个指针开始移动,第一个指针同样继续移动,当第一个指针到达链表尾部,第二个指针则刚好到达倒数第k个节点...翻译 2019-06-14 22:31:50 · 116 阅读 · 0 评论 -
剑指offer65 滑动窗口的最大值
题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,...翻译 2019-04-13 16:00:12 · 84 阅读 · 0 评论 -
剑指offer02 替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 代码: 自己写的: public class Solution { public String replaceSpace(StringBuffer str) { if(str == null) r...翻译 2019-04-03 20:27:24 · 78 阅读 · 0 评论 -
剑指offer01 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 代码: public class Solution { public boolean Find(int target, int [][] array) { if(a...翻译 2019-04-03 19:35:08 · 76 阅读 · 0 评论 -
剑指offer20 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 思路: 使用一个栈st和一个辅助栈min来保存最小值: 元素入栈: 任何元素都先入st栈,同时如果辅助栈为空或者当前入栈元素比min辅助栈栈顶元素小,则入min栈,否则,不入min栈。 元素出栈: st栈顶元素出栈,对于辅助栈,如果st出战元素等于辅助栈栈顶元素,则辅助栈...翻译 2019-04-11 18:38:26 · 66 阅读 · 0 评论 -
剑指offer18 二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 ...翻译 2019-04-11 18:03:47 · 86 阅读 · 0 评论 -
剑指offer18 删除链表中重复的结点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 代码: public class Solution { public ListNode deleteDuplication(ListNode pHead...翻译 2019-04-11 17:33:06 · 70 阅读 · 0 评论 -
剑指offer08 跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思路:也是斐波那契数列; 假设有n阶台阶,最后一跳有两种情况 1)最后一跳跳了1阶台阶,则最后一跳是从n-1阶台阶跳的. 2)最后一跳跳了2阶台阶,则最后一跳是从n-2阶台阶跳的 所以f(n)=f(n-1) + f(n-2) 所...翻译 2019-04-06 20:37:25 · 171 阅读 · 0 评论 -
剑指offer07 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 代码: 一、递归法: f(n)=f(n-1)+f(n-2); public class Solution { public int Fibonacci(int n) { return n > 1 ? n : Fibonacc...翻译 2019-04-06 20:20:39 · 109 阅读 · 0 评论 -
剑指offer06 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 代码: 自己写的,最普通的方法:向右遍历,第一个下降的元素就是最小值。 import java.uti...翻译 2019-04-05 20:02:21 · 61 阅读 · 0 评论 -
剑指offer05 用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路: push操作: 1.直接将元素压栈stack1。 pop操作: 1.从stack2中弹出元素。分两种情况 1).若stack2为空,将stack1中所有元素弹出并压入stack2。 2).若stack2不为空,直接从stack2弹出元素。 上述做法依据:本题要使...翻译 2019-04-05 19:02:39 · 68 阅读 · 0 评论 -
剑指offer04 重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 代码: public class Solution { public TreeNode reConstructBinaryTree(in...翻译 2019-04-04 21:47:21 · 95 阅读 · 0 评论 -
剑指offer15 反转链表(递归和非递归)
题目描述 输入一个链表,反转链表后,输出新链表的表头。 思路: 方法一、递归:比较简单。 解析见注释 public class Solution { public ListNode ReverseList(ListNode head) { if(head == null || head.next == null) return head;...翻译 2019-06-14 23:02:20 · 122 阅读 · 0 评论