
剑指offer Java实现
沉默着忍受
全栈工程师,擅长微信小程序全栈开发,uni-app开发,python大数据分析,SpringMVC,springBoot,vue2。曾就职于京东,快手,哔哩哔哩。现就职于阿里-大淘宝技术部门
展开
-
二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:1、需要选择遍历方法,选择中序遍历可以实现顺序的排列2、 定义方法ConvertSub(TreeNode pRootOfTree)3、 先遍历根结点的左子树,在遍历根的右子树;拿到的两个结点相互指向;4、 定义函数Convert(TreeNode pRootOfTree) ,调用方法ConvertSub(TreeNode pRootOfTree),定义双向链表的头结原创 2021-06-03 23:56:27 · 218 阅读 · 5 评论 -
复杂链表的复制
题目:请实现函数RandomListNode chose(RandomListNode head),复制一个复杂链表。在复杂链表中,每个节点除了有一个m pNext指针指向下一个节点,还有一个m pSibling 指针指向链表中的任意节点或者ullpr. 节点的C++定义如下:主要思路:提示:这里可以添加要学的内容例如:1、 将复制的节点放在被复制节点的后面;方法:2、 设置复制后的节点得指向3、 奇数位是原来得链表,偶数位是复制后的链表;只要将奇数位和偶数位的节点分别链接起来,返回偶数原创 2021-06-02 17:33:13 · 394 阅读 · 3 评论 -
判断二叉树的子树
//定义二叉树class NodeTree{ public int val; public NodeTree leftchild; public NodeTree rightchild; public NodeTree(int val) { this.val = val; } public NodeTree() { } public NodeTree Create(){ NodeTree a =原创 2021-04-11 22:28:48 · 248 阅读 · 0 评论 -
5分钟学会反转链表
5分钟学会反转链表今天我们来看一看反转链表的解决;方法:(三步走)1.构造一个单链表;2.巧用3个指针,prev(指向当前节点前面的节点),nows(指向当前结点),band(指向当前结点的后一·个结点);3.函数实现,将当前结点保存,prev保存当前节点,band保存当前节点后一个节点,将当前节点指向prve,当前节点向后移动,重复动作。最后band指向当前结点,返回band(其位反转链表的头结点了)具体代码实现;1.构造一个单链表;//定义一个单链表class ListNode{原创 2021-04-09 18:06:37 · 310 阅读 · 1 评论 -
递归实现合并两个排序的链表
递归实现合并两个排序的链表今天遇到一个比较有趣的题,之前合并两个排序的链表,都是比较生涩的算法,今天想用递归实现,没有想到成功了首先我们自己需要定义一个链表类在创建两个有序的链表,我是手动创建的,如果感兴趣的盆友可以利用头插法代码如下://创建单链表class ListNode{ public int val; public ListNode next;//有参构造 public ListNode(int val) { this.val = val;原创 2021-04-09 00:04:02 · 348 阅读 · 1 评论 -
如何确定一个链表有环,入口节点是什么?
如何确定一个链表有环,入口节点是什么?1.首先定义一个单链表;var ,next,是单链表中的属性,分别表示节点值和下一个节点的指向;代码如下://定义一个链表 class List{ public int var; public List next;//有参构造 public List(int var) { this.var = var; }//无参构造 public List() { } //创建一个带环的链原创 2021-04-07 00:27:20 · 405 阅读 · 5 评论 -
输出链表中的倒数第K个节点(快慢指针和栈的实现)
import java.util.Stack;class listNode { public int var ; public listNode next; public listNode(int var) { this.var = var; }}public class Demo { public static void main(String[] args) { Demo sb = new Demo();原创 2021-03-26 22:37:16 · 218 阅读 · 0 评论 -
动态规划之机器人的移动范围的回溯算法
动态规划之机器人的移动范围的回溯算法心得要想解决这个问题首先要理清思路题目:地上有一个M行N列的方格,一个机器人从坐标0,0的格子开始移动,每次可以向左右上下移动一格,但不能进入航坐标和列坐标的位数之和,大于K的格子列入,当K为18时,机器人能够进入方格35 ,37,因为3+5+3+7=18,但它不能进入方格35 ,38,因为3+5+3+8=19,请问该机器人能够到达多少个格子?首先,机器人得移动方格会受限制不能大于行坐标和列坐标得位数之和;因此首先要计算出各个位上得数然后求和,这里我定义了一个函数g原创 2021-03-23 23:10:54 · 367 阅读 · 0 评论 -
利用栈实现数组中整数奇偶数的重新排序
利用栈实现数组中整数奇偶数的重新排序今天为了掌握栈的使用,就练习了实现数组中整数奇偶数的重新排序的算法题;我总结了一自己的思路首先我需要两个栈,一个保存偶数,一个保存奇数。还需要一个中间数组;import java.util.*;import java.util.Stack;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array原创 2021-03-22 21:16:46 · 883 阅读 · 0 评论 -
四分钟掌握斐波那契数列算法题
斐波那契数列的经典算法题自我学习基本斐波那契是数列递归和非递归思路//斐波那契数import java.util.Scanner;public class Demo { public static void main(String[] args) { Scanner sb = new Scanner(System.in); int n = sb.nextInt(); Demo demo = new Demo(); Syste原创 2021-03-17 21:18:14 · 438 阅读 · 2 评论 -
用两个栈实现队列
用两个栈实现队列的自我总结//用两个栈实现队列/** 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别,* 完成在队列尾部插入节点和在队列头部删除节点删除*/import java.util.EmptyStackException;import java.util.Stack;class Queue{ //创建两个栈 stack1 和 stack2 public Stack<Integer> stack1 =原创 2021-03-12 16:44:35 · 261 阅读 · 0 评论 -
二叉树的下一个节点
今天来熟悉熟悉中序遍历的基本使用class Btree { public Object val; public Btree leftchild; public Btree rightchild; public Btree father; public Btree(Object val) { this.val = val; } public Btree() { }}创建一个带有指向父节点的一个二叉树public cl原创 2021-03-11 22:20:49 · 265 阅读 · 0 评论 -
从尾到头打印链表
单链表创建和打印链表自我总结import java.util.Stack;//创建一个节点;class Node{ public int val; public Node Next; public Node() { } public Node(int val) { this.val = val; }}public class Demo { public static void main(String[] args) {原创 2021-03-05 18:01:27 · 278 阅读 · 2 评论 -
替换字符串
import java.util.Arrays;/** 替换空格*1.先遍历一次字符串,统计空格格式,基本处于替换后的长度。2.准备两个指针, P一指向字符串末尾。, P2指向替换后字符串末尾。3.移动PE向前把P1指向的内容复制到P2之上的内容中,直到碰到第1个空格为止。4.碰到一个空格后,把P1向前移动一格,在P2之前插入20% , P2向前移动三个单位。*/public class Demo { public static void main(String[] args) {原创 2021-03-03 15:33:56 · 287 阅读 · 1 评论 -
二维数组中的查找
public class Demo { public static void main(String[] args) { int arr[][]= {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; Demo sb=new Demo(); System.out.println(sb.Find(arr,4,4,7)); } private boolean Find(int[][] nums,in原创 2021-03-02 15:38:09 · 272 阅读 · 0 评论 -
数组中重复的数字
public class Deom { //不修改数组找到重复的数字 public static void main(String[] args) { int[] nums = {2,3,5,4,3,2,6,7}; Deom sb = new Deom(); System.out.println(sb.Found(nums)); System.out.println(sb.getNumber(nums))原创 2021-03-01 14:05:35 · 259 阅读 · 0 评论 -
数组中重复的数字
public class Deom { //数组中重复的数字 public static void main(String[] args) { int[] nums = {2,3,1,0,2,5,3}; Deom sb = new Deom(); //System.out.println(sb.Found1(nums)); System.out.println(sb.Found3(nums)); } privat原创 2021-03-01 08:28:37 · 239 阅读 · 0 评论