Algorithm
journey_TripleP
这个作者很懒,什么都没留下…
展开
-
【链表】剑指Offer: 合并两个排序的链表
【在线编程】合并两个排序的链表【问题描述】输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。【解题思路 & Java实现】方法一:借用一个空结点,利用尾插法新建合并后的链表。同时遍历两个链表,值小的先插入。/*public class ListNode { int val; ListNode next = null;...原创 2019-05-09 11:22:55 · 103 阅读 · 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 · 113 阅读 · 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 · 135 阅读 · 0 评论 -
【数组】剑指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 · 248 阅读 · 0 评论 -
【链表】剑指Offer: 删除链表中重复的结点
【在线编程】 删除链表中重复的结点【问题描述】在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5【解题思路 & Java实现】首先看下这个题目:删除有序链表中重复的结点,重复的结点只保留一个。思路:p指针是工作指...原创 2019-05-15 10:20:35 · 130 阅读 · 0 评论 -
【栈和队列】剑指Offer: 用两个栈实现一个队列
【在线编程】剑指Offer: 用两个栈实现一个队列【问题描述】用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。【解题思路 & Java实现】栈stack1 用来模拟队列的push操作, 栈stack2 用来模拟队列的pop操作,如果 stack2为空,则将stack1中的所以数据移到stack2中,这样可以保证先进先出的顺序。import j...原创 2019-05-15 11:15:12 · 157 阅读 · 0 评论 -
【栈和队列】剑指Offer: 包含min函数的栈
【在线编程】包含min函数的栈【问题描述】定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。【解题思路 & Java实现】方法: stack栈用来存储数据,并借用辅助栈min同步记录stack每个状态下的最小值,也就是说让min的栈顶始终保持当前stack栈的最小元素,所以在stack栈进行 push 操作时,比较node和min...原创 2019-05-15 11:58:28 · 137 阅读 · 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 · 99 阅读 · 0 评论 -
【树】剑指Offer:从上往下打印二叉树
【在线编程】从上往下打印二叉树【问题描述】从上往下打印出二叉树的每个节点,同层节点从左至右打印。【解题思路 & Java实现】方法:二叉树的层次遍历,借助辅助队列,每次存储树的一层,然后读取队列的第一个节点,将值存到结果ArrayList中去,并继续将该节点的下一层加入到队列中。import java.util.ArrayList;/**public class TreeNo...原创 2019-05-24 12:10:32 · 114 阅读 · 0 评论 -
【链表】剑指Offer: 复杂链表的复制
【在线编程】复杂链表的复制【问题描述】输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)【解题思路 & Java实现】方法一:依次复制每个结点以及该结点的next结点和random结点。时间复杂度O(n),空间复杂度O(...原创 2019-05-11 13:04:49 · 137 阅读 · 0 评论 -
【链表】剑指Offer: 两个链表的第一个公共结点
【在线编程】两个链表的第一个公共结点【问题描述】输入两个链表,找出它们的第一个公共结点。【解题思路 & Java实现】方法一:如果两个链表存在公共结点,那么这两个链表一定呈 Y 形,公共结点后面的所有结点都是相同的。我们让长链表先走,知道走到与短链表的头部位置,然后两者并驾齐驱,直到遇到第一个公共结点。这个方法需要分别遍历两次链表。/*public class ListNode...原创 2019-05-11 15:13:35 · 128 阅读 · 0 评论 -
【栈和队列】剑指Offer:栈的压入、弹出序列
【在线编程】栈的压入、弹出序列【问题描述】输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)【解题思路 & Java实现】思路:为了...原创 2019-05-16 11:57:46 · 142 阅读 · 0 评论 -
【树】剑指Offer:从上往下打印二叉树
【在线编程】从上往下打印二叉树【问题描述】从上往下打印出二叉树的每个节点,同层节点从左至右打印。【解题思路 & Java实现】方法:树的层次遍历。借助辅助队列,每次存储树的一层,然后读取队列的第一个节点,将值存到结果ArrayList中去,并继续将该节点的下一层加入到队列中。import java.util.ArrayList;/**public class TreeNode...原创 2019-05-28 09:32:00 · 120 阅读 · 0 评论 -
【树】剑指Offer:二叉搜索树的后序遍历序列
【在线编程】二叉搜索树的后序遍历序列【问题描述】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。【解题思路 & Java实现】二叉搜索树(BST):二叉搜索树又叫二叉查找树,指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点...原创 2019-05-28 10:31:53 · 112 阅读 · 0 评论 -
【树】剑指Offer:二叉树中和为某一路径的值
【在线编程】二叉树中和为某一路径的值【问题描述】输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)【解题思路 & Java实现】思路:深度遍历二叉树,利用path记录每条路径,在左右子树中递归寻找满足条件的路径。 import j...原创 2019-05-28 15:03:35 · 146 阅读 · 0 评论 -
【树】剑指Offer: 树的子结构
【在线编程】树的子结构【问题描述】输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)【解题思路 & Java实现】思路:首先在 root1中找到与root2的根结点相等的结点(称为候选结点,有可能从该结点开始匹配到root2), 然后从该候选结点开始进行匹配root2。如果匹配成功,则返回true;如果匹配失败,则在root1的左子树中寻找下...原创 2019-05-24 10:23:50 · 116 阅读 · 0 评论 -
【链表】剑指Offer: 链表中环的入口结点
【在线编程】链表中环的入口结点【问题描述】给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。【解题思路 & Java实现】首先思考一个问题:如何判断一个单向链表是否有环?思路:使用快慢指针,fast每次走两步,slow每次走一个步,如果链表有环,slow 和 fast 必然在环内相遇。时间复杂度 O(n), 空间复杂度O(1)./** * 判断一个单链...原创 2019-05-14 10:13:11 · 123 阅读 · 0 评论 -
【链表】剑指Offer: 反转链表
【在线编程】反转链表【问题描述】输入一个链表,反转链表后,输出新链表的表头。【解题思路 & Java实现】方法一: 前后指针法,原地逆转, 注意最终返回pre。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = v...原创 2019-05-08 20:13:50 · 109 阅读 · 0 评论 -
【数组】剑指Offer:二维数组中的查找
【数组】【剑指Offer】二维数组中的查找【问题描述】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。【解题思路】找到特殊二维数组的特殊点注意:二维数组的遍历 行指针 列指针【Java 实现】 public class Solutio...原创 2019-04-26 18:17:35 · 131 阅读 · 0 评论 -
【数组】剑指Offer:调整数组顺序使奇数位于偶数前面
【在线编程】调整数组顺序使奇数位于偶数前面【问题描述】输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。【解题思路 & Java实现】必记算法:规模为n 冒泡算法基本实现如下:记住 外循环 n-1次 内循环 n-1-i次public static void pop...原创 2019-04-26 18:39:58 · 110 阅读 · 0 评论 -
【数组】剑指Offer: 顺时针打印矩阵
【在线编程】顺时针打印矩阵【问题描述】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.【解决思路 & Java实现】思路:先打印外围(注意一行一列的情况),然后缩...原创 2019-04-26 18:52:17 · 143 阅读 · 0 评论 -
【数组】剑指Offer: 数组中出现次数超过一半的数字
【在线编程】数组中出现次数超过一半的数字【问题描述】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。【解题思路 & Java实现】方法一:如果数组中存在超过数组一半的数字,那么数组排序后,这个数字一定出现在数组的中间位置。...原创 2019-04-26 18:59:45 · 142 阅读 · 0 评论 -
【数组】剑指Offer: 最小的K个数
【在线编程】最小的K个数【问题描述】输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。【解题思路 & Java实现】方法一:先排序,然后输出前k个数。时间复杂度 O(nlogn)import java.util.*;public class Solution { public ArrayList&...原创 2019-04-26 19:07:04 · 169 阅读 · 0 评论 -
【数组】【动态规划】剑指Offer: 连续子数组的最大和
【在线编程】连续子数组的最大和【问题描述】HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)...原创 2019-04-26 19:10:49 · 196 阅读 · 0 评论 -
【数组】剑指Offer: 把数组排成最小的数
【在线编程】把数组排成最小的数【问题描述】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。【解题思路 & Java实现】思路:本题的关键是自定义比较器!!!import java.util.Arrays;import java.util.Compara...原创 2019-04-26 19:14:35 · 126 阅读 · 0 评论 -
【数组】剑指Offer: 丑数
【在线编程】丑数【问题描述】把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。【解题思路 & Java实现】方法一:暴力解决。但是当index很大的时候,会超时。public class Solution { public int GetUg...原创 2019-04-27 20:20:04 · 128 阅读 · 0 评论 -
【数组】剑指Offer: 数组中的逆序对
【在线编程】数组中的逆序对【问题描述】在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007【解题思路 & Java实现】必知排序算法:归并排序。import java.util.Arrays;/** * 归并排序(二路归并):...原创 2019-04-28 18:11:01 · 125 阅读 · 0 评论 -
【数组】剑指Offer: 数字在有序数组中出现的次数
【在线编程】数字在有序数组中出现的次数【问题描述统计一个数字在排序数组中出现的次数。【解题思路 & Java 实现】必知查找算法:二分查找。/** * 二分查找:只能子在有序数组中使用 * 时间复杂度:平均O(logn),最坏O(logn),最好O(1) */public class BinarySearch { public static void main(S...原创 2019-04-28 21:04:10 · 377 阅读 · 0 评论 -
【数组】剑指Offer: 数组中只出现一次的数字
【在线编程】数组中只出现一次的数字【问题描述】一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。【解题思路 & Java实现】方法一:先排序,再遍历。时间复杂度O(nlogn).import java.util.Arrays;//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果pu...原创 2019-04-30 11:50:32 · 135 阅读 · 0 评论 -
【数组】剑指Offer: 和为S的两个数字
【在线编程】和为S的两个数字【问题描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。【解题思路 & Java实现】思路:夹逼。设置头尾指针。和一定,两个数字相差越远乘积越小。因为和一定的两个数,其乘积是倒抛物线,越远离对称轴城积越小,与正负无关。import java.util.ArrayList;...原创 2019-04-30 14:27:06 · 97 阅读 · 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 · 124 阅读 · 0 评论 -
【链表】剑指Offer: 从尾到头打印链表
【在线编程】从尾到头打印链表【问题描述】输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。【解题思路 & Java实现】方法一:递归。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* ...原创 2019-05-08 17:54:45 · 127 阅读 · 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 · 117 阅读 · 0 评论 -
【树】剑指Offer:二叉树的镜像
【在线编程】二叉树的镜像【问题描述】操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:【解题思路 & Java实现】首先:掌握二叉树的层次遍历,借用一个队列。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; publ...原创 2019-05-24 11:36:10 · 113 阅读 · 0 评论