
Java
文章平均质量分 91
journey_TripleP
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数组】剑指Offer: 滑动窗口的最大值
【在线编程】滑动窗口的最大值【问题描述】给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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},...原创 2019-05-07 13:56:57 · 321 阅读 · 0 评论 -
【链表】剑指Offer: 删除链表中重复的结点
【在线编程】 删除链表中重复的结点【问题描述】在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5【解题思路 & Java实现】首先看下这个题目:删除有序链表中重复的结点,重复的结点只保留一个。思路:p指针是工作指...原创 2019-05-15 10:20:35 · 173 阅读 · 0 评论 -
【栈和队列】剑指Offer: 用两个栈实现一个队列
【在线编程】剑指Offer: 用两个栈实现一个队列【问题描述】用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。【解题思路 & Java实现】栈stack1 用来模拟队列的push操作, 栈stack2 用来模拟队列的pop操作,如果 stack2为空,则将stack1中的所以数据移到stack2中,这样可以保证先进先出的顺序。import j...原创 2019-05-15 11:15:12 · 200 阅读 · 0 评论 -
【栈和队列】剑指Offer: 包含min函数的栈
【在线编程】包含min函数的栈【问题描述】定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。【解题思路 & Java实现】方法: stack栈用来存储数据,并借用辅助栈min同步记录stack每个状态下的最小值,也就是说让min的栈顶始终保持当前stack栈的最小元素,所以在stack栈进行 push 操作时,比较node和min...原创 2019-05-15 11:58:28 · 181 阅读 · 0 评论 -
【树】剑指Offer: 重建二叉树
【在线编程】重建二叉树【问题描述】输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。【解题思路 & Java实现】思路:分治法。因为前序遍历是 “根左右”,中序遍历是 “左根右”。所以从pre中第...原创 2019-05-20 17:51:15 · 143 阅读 · 0 评论 -
【树】剑指Offer:从上往下打印二叉树
【在线编程】从上往下打印二叉树【问题描述】从上往下打印出二叉树的每个节点,同层节点从左至右打印。【解题思路 & Java实现】方法:二叉树的层次遍历,借助辅助队列,每次存储树的一层,然后读取队列的第一个节点,将值存到结果ArrayList中去,并继续将该节点的下一层加入到队列中。import java.util.ArrayList;/**public class TreeNo...原创 2019-05-24 12:10:32 · 155 阅读 · 0 评论 -
【链表】剑指Offer: 复杂链表的复制
【在线编程】复杂链表的复制【问题描述】输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)【解题思路 & Java实现】方法一:依次复制每个结点以及该结点的next结点和random结点。时间复杂度O(n),空间复杂度O(...原创 2019-05-11 13:04:49 · 185 阅读 · 0 评论 -
【链表】剑指Offer: 两个链表的第一个公共结点
【在线编程】两个链表的第一个公共结点【问题描述】输入两个链表,找出它们的第一个公共结点。【解题思路 & Java实现】方法一:如果两个链表存在公共结点,那么这两个链表一定呈 Y 形,公共结点后面的所有结点都是相同的。我们让长链表先走,知道走到与短链表的头部位置,然后两者并驾齐驱,直到遇到第一个公共结点。这个方法需要分别遍历两次链表。/*public class ListNode...原创 2019-05-11 15:13:35 · 168 阅读 · 0 评论 -
【栈和队列】剑指Offer:栈的压入、弹出序列
【在线编程】栈的压入、弹出序列【问题描述】输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)【解题思路 & Java实现】思路:为了...原创 2019-05-16 11:57:46 · 190 阅读 · 0 评论 -
【树】剑指Offer:从上往下打印二叉树
【在线编程】从上往下打印二叉树【问题描述】从上往下打印出二叉树的每个节点,同层节点从左至右打印。【解题思路 & Java实现】方法:树的层次遍历。借助辅助队列,每次存储树的一层,然后读取队列的第一个节点,将值存到结果ArrayList中去,并继续将该节点的下一层加入到队列中。import java.util.ArrayList;/**public class TreeNode...原创 2019-05-28 09:32:00 · 185 阅读 · 0 评论 -
【树】剑指Offer:二叉搜索树的后序遍历序列
【在线编程】二叉搜索树的后序遍历序列【问题描述】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。【解题思路 & Java实现】二叉搜索树(BST):二叉搜索树又叫二叉查找树,指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点...原创 2019-05-28 10:31:53 · 192 阅读 · 0 评论 -
【树】剑指Offer:二叉树中和为某一路径的值
【在线编程】二叉树中和为某一路径的值【问题描述】输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)【解题思路 & Java实现】思路:深度遍历二叉树,利用path记录每条路径,在左右子树中递归寻找满足条件的路径。 import j...原创 2019-05-28 15:03:35 · 222 阅读 · 0 评论 -
【树】剑指Offer: 树的子结构
【在线编程】树的子结构【问题描述】输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)【解题思路 & Java实现】思路:首先在 root1中找到与root2的根结点相等的结点(称为候选结点,有可能从该结点开始匹配到root2), 然后从该候选结点开始进行匹配root2。如果匹配成功,则返回true;如果匹配失败,则在root1的左子树中寻找下...原创 2019-05-24 10:23:50 · 159 阅读 · 0 评论 -
【数组】剑指Offer: 构建乘积数组
【在线编程】构建乘积数组【问题描述】给定一个数组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]。不能使用除法。【解题思路 & Java实现】方法一:B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1] = pre[i]*post[i]。其中 pre[i] = A...原创 2019-05-07 09:42:16 · 177 阅读 · 0 评论 -
【数组】剑指Offer:数组中重复的数字
【在线编程】数组中重复的数字【问题描述】在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2解题思路 & Java实现方法一:充分利用“数组中的元素在0~n-1之间”这一条...原创 2019-05-06 20:44:00 · 160 阅读 · 0 评论 -
【链表】剑指Offer: 合并两个排序的链表
【在线编程】合并两个排序的链表【问题描述】输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。【解题思路 & Java实现】方法一:借用一个空结点,利用尾插法新建合并后的链表。同时遍历两个链表,值小的先插入。/*public class ListNode { int val; ListNode next = null;...原创 2019-05-09 11:22:55 · 145 阅读 · 0 评论 -
Java多线程基础
java多线程技能1. 使用多线程实现多线程编程的方式主要有两种,一种是继承 Thread 类,另一种是实现 Runnable 接口.继承 Thread 类start() 方法通知‘线程规划器’ 此线程已经准备就绪,等待调用线程的 run() 方法,具有异步执行的效果;如果调用 thread.run() 则是同步,此线程对象不交给 ‘线程规划器’来进行处理,而...原创 2018-04-23 11:19:12 · 258 阅读 · 0 评论 -
Java 异常
异常分类Java 语言规范将派生于Error类或RuntimeException类的所有异常称为未检查(unchecked)异常;所有其他的异常称为已检查(checked)异常。一个方法必须声明所有可能抛出的checked异常,而unchecked异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。1. ErrorErro...原创 2018-04-24 17:47:11 · 241 阅读 · 0 评论 -
Java 容器
Java 容器主要包括 Collection 和 Map 两种;Collection 包括 List, Set, QueueList1. ArrayList基于动态数组实现实现了 RandomAccess 接口, 支持随机访问ArrayList 具有动态扩容特性, 保存元素的数组使用 transient 修饰,声明数组默认不会被序列化。ArrayList ...原创 2018-04-25 15:25:49 · 280 阅读 · 1 评论 -
深入理解 Java 虚拟机
深入理解Java虚拟机第一部分:自动内存管理机制一. 运行时数据区域1. 程序计数器程序计数器可以看作当前线程执行的字节码的行号指示器如果线程正在执行的是一个 Java 方法,这个计数器记录的是当前线程正在执行的字节码的指令的地址如果线程正在执行的是一个 Native 方法,这个计数器则为空这个内存区域是唯一一个没有规定 OutOfMemoryError 情况的区域2. J...原创 2019-04-14 18:00:06 · 371 阅读 · 0 评论 -
【数组】剑指Offer: 数组中只出现一次的数字
【在线编程】数组中只出现一次的数字【问题描述】一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。【解题思路 & Java实现】方法一:先排序,再遍历。时间复杂度O(nlogn).import java.util.Arrays;//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果pu...原创 2019-04-30 11:50:32 · 189 阅读 · 0 评论 -
【数组】剑指Offer: 和为S的两个数字
【在线编程】和为S的两个数字【问题描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。【解题思路 & Java实现】思路:夹逼。设置头尾指针。和一定,两个数字相差越远乘积越小。因为和一定的两个数,其乘积是倒抛物线,越远离对称轴城积越小,与正负无关。import java.util.ArrayList;...原创 2019-04-30 14:27:06 · 146 阅读 · 0 评论 -
【数组】剑指Offer: 扑克顺子
【在线编程】扑克顺子【问题描述】LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为...原创 2019-04-30 16:03:50 · 175 阅读 · 0 评论 -
【链表】剑指Offer: 从尾到头打印链表
【在线编程】从尾到头打印链表【问题描述】输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。【解题思路 & Java实现】方法一:递归。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* ...原创 2019-05-08 17:54:45 · 169 阅读 · 0 评论 -
【链表】剑指Offer: 链表中倒数第k个结点
【在线编程】链表中倒数第k个结点【问题描述】输入一个链表,输出该链表中倒数第k个结点。【解题思路 & Java实现】注意特殊情况:链表为空,k>链表长度方法一:倒数第k个就是顺数第n-k+1个,遍历两次列表。时间复杂度 O(n)./*public class ListNode { int val; ListNode next = null; L...原创 2019-05-08 18:55:35 · 161 阅读 · 0 评论 -
【链表】剑指Offer: 反转链表
【在线编程】反转链表【问题描述】输入一个链表,反转链表后,输出新链表的表头。【解题思路 & Java实现】方法一: 前后指针法,原地逆转, 注意最终返回pre。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = v...原创 2019-05-08 20:13:50 · 155 阅读 · 0 评论 -
【链表】剑指Offer: 链表中环的入口结点
【在线编程】链表中环的入口结点【问题描述】给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。【解题思路 & Java实现】首先思考一个问题:如何判断一个单向链表是否有环?思路:使用快慢指针,fast每次走两步,slow每次走一个步,如果链表有环,slow 和 fast 必然在环内相遇。时间复杂度 O(n), 空间复杂度O(1)./** * 判断一个单链...原创 2019-05-14 10:13:11 · 165 阅读 · 0 评论 -
【树】剑指Offer:二叉树的镜像
【在线编程】二叉树的镜像【问题描述】操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:【解题思路 & Java实现】首先:掌握二叉树的层次遍历,借用一个队列。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; publ...原创 2019-05-24 11:36:10 · 148 阅读 · 0 评论