
手撕算法题
三名狂客
success without applause,diligence without reward!Becoming、Cognifying、Flowing、Screening、Accessing、Sharing、Filtering、Remixing、Interacting、Tracking、Questioning、Beginning.
展开
-
寻找最长回文子串
一、题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: “babad”输出: “bab”注意: "aba"也是一个有效答案。二、解决方案package com.company;/** * 功能描述: 最长回文子串 * * @author zc * @since 2020-05-19 */class Solution05 { /** * 寻找最长回文子串 * 算法: 动态规划 * 动态原创 2020-05-21 18:03:45 · 509 阅读 · 0 评论 -
堆排序
一、堆排序简介堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种**选择排序,**它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆排序的基本思想是:将待排序序列构造成一个大顶堆 ( 一般升序采用大顶堆,降序采用小顶堆 ),此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。二、堆排序实现/** * * 堆排序原创 2020-05-13 15:11:11 · 499 阅读 · 0 评论 -
推箱子寻求最少步数(广度优先搜索)
“推箱子”这个经典的游戏,具体规则就是在一个N*M的地图上,有1个玩家、1个箱子、1个目的地以及若干障碍,其余是空地。玩家可以往上下左右4个方向移动,但是不能移动出地图或者移动到障碍里去。如果往这个方向移动推到了箱子,箱子也会按这个方向移动一格,当然,箱子也不能被推出地图或推到障碍里。当箱子被推到目的地以后,游戏目标达成。现在告诉你游戏开始是初始的地图布局,请你求出玩家最少需要移动多少步才能够将游翻译 2017-10-18 10:05:11 · 5290 阅读 · 0 评论 -
用栈来求解限制后的汉诺塔问题
用栈来求解限制后的汉诺塔问题(限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间,求当塔有N层的时候,打印最优移动过程和最优移动总步数)import java.util.Stack;//用栈来求解限制后的汉诺塔问题(限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间,求当塔有N层的时候,打印最优移动过程和最优移动总步数翻译 2017-10-18 15:58:30 · 1596 阅读 · 0 评论 -
删除链表的中间节点和a/b处的节点
实现的代码如下://删除链表的中间节点和a/b处的节点public class DelMidList{ //链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data原创 2017-10-27 15:46:26 · 496 阅读 · 0 评论 -
生成窗口最大值数组
实现的完整代码如下:import java.util.*;//生成窗口最大值数组(设计时间复杂度为O(N)的算法)public class getMaxWindowArr{ /** 获得最大值数组 arr[] 表示源数组 w 滑动窗口的大小 ret 返回的最大值数组 **/ public static原创 2017-10-20 00:28:58 · 519 阅读 · 0 评论 -
实现栈的pop,push和getMin
* 设计实现一个有getMin功能的栈 (实现一个特殊的栈,在实现栈的基本功能(pop,push)的基础上, 再实现返回栈中最小元素(getMin)的操作)import java.util.*;/** * 设计实现一个有getMin功能的栈 * (实现一个特殊的栈,在实现栈的基本功能(pop,push)的基础上, * 再实现返回栈中最小元素(getMin)的操作) * @autho原创 2017-10-11 11:04:53 · 1244 阅读 · 0 评论 -
java实现单链表的反转
实现单链表的反转://翻转链表public class ReverseList{ //链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data) {原创 2017-10-28 11:02:24 · 460 阅读 · 0 评论 -
构造数组的MaxTree(二叉树)
举个例子如下:实现的代码如下:import java.util.Stack;import java.util.HashMap;//构造数组的MaxTreepublic class MaxTree{ //二叉树结点的定义如下 public static class Node{ public int value; public Nod原创 2017-10-20 16:42:19 · 879 阅读 · 0 评论 -
反转单向和双向链表简化
反转单向和双向链表简化://反转单向和双向链表public class ReverseList{ //节点的定义 public static class Node{ public int value; public Node next; public Node(int data)原创 2017-10-29 16:21:12 · 477 阅读 · 0 评论 -
反转部分单向链表
反转部分单向链表://反转部分单向链表的public class ReverseSubList{ //链表节点的定义 public static class Node{ public int value; public Node next; //节点的定义 public Node(int翻译 2017-10-29 17:49:09 · 1077 阅读 · 0 评论 -
将搜索二叉树转换成双向链表
import java.util.*;//将搜索二叉树转换成双向链表public class TwoList{ //节点的定义 public static class Node{ public int value; public Node left; public Node right; public Nod翻译 2017-11-07 19:44:39 · 596 阅读 · 0 评论 -
环形单链表的约瑟夫问题
//解决约瑟夫问题public class YueSeFu{ //定义链表的节点 public static class Node{ public int value; Node next; public Node(int data) { this.value=data;原创 2017-10-30 13:10:06 · 471 阅读 · 0 评论 -
单链表的选择排序
//单链表的选择排序public class SelectSortList{ //单链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data) { this.value=原创 2017-11-08 10:14:01 · 4385 阅读 · 2 评论 -
一种怪异的节点的删除
//一种怪异的节点的删除public class RemoveNode{ //单链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data) { this.va原创 2017-11-08 10:51:52 · 286 阅读 · 0 评论 -
向有序的环形单链表中插入新节点
//向有序的环形单链表中插入新节点public class InsertNode{ //单链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data) { this.v原创 2017-11-08 16:13:09 · 693 阅读 · 0 评论 -
用两个栈实现队列
编写一个类,用两个栈实现一个队列,支持队列的基本操作(add,poll,peek) 编写的代码如下:import java.util.Stack;public class Problem_02_TwoStacksImplementQueue { public static class TwoStacksQueue { public Stack stackPush;翻译 2017-10-13 16:55:12 · 465 阅读 · 0 评论 -
判断一个链表是否为回文结构
import java.util.Stack;//判断一个链表是否为回文结构public class HuiWenList{ //定义链表的节点 public static class Node{ int value; Node next; public Node(int data) { this.valu原创 2017-10-31 16:54:30 · 1268 阅读 · 0 评论 -
用递归函数和栈操作逆序一个栈
仅用递归函数和栈操作逆序一个栈 (1) getAndRemoveLastElement()函数(2) reverse()函数(3)完整代码如下:import java.util.Stack;//仅用递归函数和栈操作逆序一个栈public class ReverseStack{ //将栈的栈底元素返回并移除 public static原创 2017-10-14 20:31:30 · 625 阅读 · 0 评论 -
合并两个有序的单链表
//合并两个有序的单链表public class MergeList{ public static class Node{ public int value; public Node next; public Node(int data) { this.value=data; } } //合并两翻译 2017-11-09 11:13:50 · 456 阅读 · 0 评论 -
求最大子矩阵的大小
实现的完整代码如下: import java.util.Stack;//获得给定矩阵的最大子矩阵public class MaxSubMatrix{ public static int getMaxSubMatrix(int[][]map) { if(map==null||map.length==0||map[0].length==0) {翻译 2017-10-24 10:49:34 · 1166 阅读 · 0 评论 -
最大值减去最小值小于或等于num的子数组数量
import java.util.LinkedList;//最大值减去最小值小于或等于num的子数组数量public class getAllSubArray{ //获得子数组的数量 public static int getNum(int[]arr,int num) { if(arr==null||arr.length==0) {翻译 2017-10-24 17:55:46 · 1003 阅读 · 1 评论 -
按照左右半区的方式重新组合单链表
//按照左右半区的方式重新组合单链表public class ReConList{ //链表的定义 public static class Node{ public int value; public Node next; public Node(int data) { this.value=data; } } //按照左右半区的方式重新组合单链表原创 2017-11-10 13:17:22 · 631 阅读 · 0 评论 -
将单向链表按某值划分成左边小、中间相等、右边大的形式
import java.util.LinkedList;import java.util.Queue;//将单向链表按某值划分成左边小、中间相等、右边大的形式public class DivideList{ //链表节点的定义 public static class Node{ public int value; public Node next; publi原创 2017-11-01 22:19:45 · 630 阅读 · 0 评论 -
用递归和非递归方式实现二叉树先序、中序和后序遍历
import java.util.Stack;//分别用递归和非递归方式实现二叉树先序、中序和后序遍历public class TreeTravel{ //二叉树节点的定义 public static class Node{ public int value; public Node left; public Node right;原创 2017-11-10 21:18:51 · 2159 阅读 · 0 评论 -
复制含有随机指针的链表
import java.util.*;//复制含有随机指针的链表public class CopyList{ //链表节点的定义 public static class Node{ public int value; public Node next; public Node rand; public Node(int da翻译 2017-11-02 11:05:48 · 534 阅读 · 0 评论 -
打印两个有序链表的公共部分
//打印两个有序链表的公共部分public class getSameList{ //获得两个有序链表的公共部分 public static void GetSameList(int[] head1,int[] head2) { if(head1==null||head2==null) { return; }原创 2017-10-25 16:44:38 · 571 阅读 · 0 评论 -
猫狗队列问题
实现猫狗队列问题:import java.util.Queue;import java.util.LinkedList;//实现猫狗队列的问题public class CatDogQueue{ //宠物 类 public static class Pet{ private String type; public Pet(String翻译 2017-10-17 10:15:22 · 469 阅读 · 0 评论 -
用一个栈实现另外一个栈的排序
用一个栈实现另外一个栈的排序:import java.util.Stack;//用一个栈实现另外一个栈的排序public class StackSortStack{ //借助栈的排序 public static void StackSort(Stackstack) { Stack help =new Stack(); while(原创 2017-10-17 12:32:52 · 453 阅读 · 0 评论 -
在单链表和双链表中删除倒数第k个节点
实现的完整代码如下://在单链表和双链表中删除倒数第k个节点public class DeleteList{ //单链表节点的定义 public static class Node{ int value; Node next; public Node(int data) { thi原创 2017-10-26 10:28:21 · 524 阅读 · 0 评论 -
打印二叉树的边界节点
public class PrintEdgeNodes { //二产树节点的定义 public static class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; } } //按照标准翻译 2017-11-13 10:54:56 · 1390 阅读 · 2 评论 -
找到二叉树中的最大搜索二叉子树
//找到二叉树中的最大搜索二叉子树public class MaxSearchTree{ //二叉树节点的定义 public static class Node{ public int value; public Node left; public Node right;翻译 2017-11-17 10:57:57 · 704 阅读 · 0 评论 -
两个单链表生成相加链表
import java.util.Stack;//两个单链表生成相加链表public class plusList{ //链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data) { this原创 2017-11-03 13:29:57 · 775 阅读 · 0 评论 -
直观地打印二叉树
public class PrintBinaryTree { //二叉树节点的定义 public static class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; } } //打翻译 2017-11-13 17:32:19 · 784 阅读 · 0 评论 -
二叉树的序列化和反序列化
import java.util.*;//二叉树的序列化和反序列化public class SerializeTree{ //二叉树结点的定义 public static class Node{ public int value; public Node left; public Node right; public Node(翻译 2017-11-14 11:12:07 · 406 阅读 · 0 评论 -
两个单链表相交的一系列问题
//两个单链表相交的一系列问题public class TwoInterList{ //链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data) { this.value=data; } } //返回两个链表相交的第一个翻译 2017-11-04 23:49:56 · 443 阅读 · 0 评论 -
在二叉树中找到一个节点的后继节点
//在二叉树中找到一个节点的后继节点public class getNextNode{ //节点的定义 public static class Node{ public int value; public Node left; public Node right; public Node parent; public Node(int data) { this翻译 2017-11-28 16:00:42 · 449 阅读 · 0 评论 -
将单链表的每k个节点之间逆序
import java.util.Stack;//将单链表的每k个节点之间逆序public class ReverseKOfList{ //单链表节点的定义 public static class Node{ public int value; public Node next; public Node(int data)翻译 2017-11-05 16:56:03 · 1356 阅读 · 0 评论 -
在二叉树中找到两个节点的最近公共祖先
import java.util.*;//在二叉树中找到两个节点的最近公共祖先public class GetLowestTree{ //二叉树节点的定义 public static class Node{ public int value; public Node left; public Node right; public Node(int data) {翻译 2017-11-29 10:48:22 · 2255 阅读 · 0 评论 -
TarjanAndDisjointSetsForLCA解决批量查询问题
import java.util.HashMap;import java.util.LinkedList;public class TarjanAndDisjointSetsForLCA { public static class Node { public int value; public Node left; public Node right; public N翻译 2017-11-29 11:10:33 · 345 阅读 · 0 评论