自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

记录,记录,记录

坚持,再坚持

  • 博客(33)
  • 收藏
  • 关注

原创 37:从上到下打印二叉树

从上到下打印二叉树 二叉树的层次遍历的变种,使用两个变量记录待打印的数据个数和下次待打印的数据个数即可。 public class Offer37 { public static void cengci2(TreeNode root){ if(root==null)return; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root);

2020-07-31 22:14:47 110

原创 36:从上到下打印二叉树

从上到下打印二叉树 这个题目也就是二叉树的层次遍历,使用队列来做 public class Offer37 { public static void cengci(TreeNode root){ if(root==null)return; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()){

2020-07-31 21:55:19 71

原创 35:包含min函数的栈

包含min函数的栈 定义栈的结构,请在该类型中实现一个能够得到栈的最小元素的min函数。 在该栈中,调用min,push及pop的时间复杂度都是O(1) 主要问题点: 再把最小值弹出之后,我们如何知道下一个最小值,所以才需要用到额外的辅助栈。 public class Offer36 { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = new Stack<>();

2020-07-30 21:10:12 80

原创 34:顺时针打印矩阵

顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 public class Offer35 { public static void main(String[] args) { int[][] data = {{1,2,3,4}, {1,2,3,4}, {1,2,3,4}}; printMatrixInCircle(data); }

2020-07-29 23:38:25 107

原创 33:对称的二叉树

对称的二叉树 请实现一个函数,用来判断一颗二叉树是不是堆成。 public class Offer34 { //思路:递归来做,一次同时比较左右两个对称的点位 public static boolean isSymmetrical(TreeNode root1,TreeNode root2){ if(root1==null && root2==null)return true; if(root1==null||root2==null)retu

2020-07-28 22:41:24 60

原创 32:二叉树的镜像

二叉树的镜像 完成一个函数,输入一颗二叉树,输出它的镜像 public class Offer33 { public static void main(String[] args) { TreeNode node = Offer10.createNode(); mirrorRecursively(node); Main.cengci(node); } //思路:将某节点下的两个节点互换即可 public static void

2020-07-27 22:22:59 70

原创 31:树的子结构

树的子结构 输入两个二叉树A和B,判断B是不是A的子结构 public class Offer32 { //思路:1.在A树中找到与B树根相同的节点。2.比较后续的树结构是否相同 public static boolean hasSubTree2(TreeNode tree1,TreeNode tree2){ boolean result = false; if(tree2==null||tree1==null)return false; //

2020-07-26 21:54:16 63

原创 30:合并两个排序的链表

合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表找那个的节点依然是递增排序的 public class Offer31 { public static void main(String[] args) { LNode node1 = new LNode(1); LNode node2 = new LNode(3); LNode node3 = new LNode(5); LNode node4 = new LNode(7);

2020-07-25 23:39:19 68

原创 29:反转链表

反转链表 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头节点 public class Offer30 { public static void main(String[] args) { LNode node1 = new LNode(1); LNode node2 = new LNode(2); LNode node3 = new LNode(3); LNode node4 = new LNode(4);

2020-07-24 22:19:27 67

原创 28:链表中环的入口节点

链表中环的入口节点 如果一个链表中包含环,如何找出环的入口节点? public class Offer29 { public static void main(String[] args) { LNode node1 = new LNode(1); LNode node2 = new LNode(2); LNode node3 = new LNode(3); LNode node4 = new LNode(4); LNode nod

2020-07-23 22:42:33 87

原创 27:链表中倒数第K个节点

链表中倒数第K个节点 输入一个链表,输出该链表中倒数第K个节点 public class Offer28 { //思路,定义两个节点变量first,next,first先指向头节点,走k-1步,这时候next节点指向头结点,first节点走到尾节点 //链表不能为空,k>0,k<=链表的长度 public static LNode FindKthToTail(LNode node, int k){ if(node==null||k==0)return nu

2020-07-22 22:53:28 69

原创 26:调整数组顺序使奇数位于偶数前面

调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分 public class Offer27 { public static void main(String[] args) { int[] arr = {1,4,2,8,3,5}; ReorderOddEvent(arr); for (int i : arr) { System.out.

2020-07-21 21:44:09 68

原创 25:表示数值的字符串

表示数值的字符串 设计一个函数用来判断字符串是否表示数值(包括整数和小数) 字符串+100,5e2,-123,3.1415926,-1E-16都表示数值,但12e,1a3.14,1.2.3,±5,12e+5.4 public class Offer26 { public static void main(String[] args) { String s = new String("12e+6.4"); System.out.println(isNumeric(s.toCh

2020-07-20 21:13:33 120

原创 24:正则表达式

正则表达式 请设计一个函数用来匹配包含’.‘和’‘的正则表达式,’.‘表示匹配任意字符,’'表示它前面的字符可以任意次数。例如字符串"aaa"与模式a.a和abaca匹配,不与aa.a和ab*a匹配 public class Offer25 { public static void main(String[] args) { char[] str = new String("fsffffas").toCharArray(); char[] p1 = new Stri

2020-07-19 22:26:18 233

原创 23:删除链表的重复节点

删除链表中重复的节点 条件:链表为排序链表 public class Offer24 { public static void findDuplicateNodes(LNode node) { if(node==null)return; //定义引用指向next节点 LNode pre = node; LNode next = node.next; //1.如果为单节点,则不会进入循环 while (

2020-07-18 23:05:15 66

原创 22: 删除链表的节点

删除链表的节点 给定一个单向链表的头指针和节点指针,在O(1)时间内删除该节点 public class Offer23 { public static void deleteListNode(LNode head,LNode target){ //1.判断是否为空节点 if(head==null||target==null)return; //2.判断头结点是否指向目标指针,头节点情况 if(head==target){

2020-07-17 23:45:00 128

原创 21:打印从1到最大的n位数

打印从1到最大的n位数 例如n=3,从1打印到999 public class Offer22 { public static void main(String[] args) { printMaxOfN(2); } public static void printMaxOfN(int n){ if(n<1)return; //1.考虑大数的情况,所以使用char[] char[] number = new char[n+

2020-07-17 23:17:09 77

原创 20:数值的整次方

数值的整次方 实现函数double(double base,int exponent),求base的exponent次方 要点: 使用exponent>>1来代替exponent/2 使用exponent&1来判断奇偶 参数合规性判断 public class Offer21 { public static double power(double base,int exponent){ double result = 0; if(expone

2020-07-16 00:19:31 86

原创 19:二进制中1的个数

二进制中1的个数: 输入整数,输出该整数转二进制中1的值 public class Offer20 { /** * 这里需要想明白,一个整数减去1会发生什么 * 现在我们假想二进制序列中,第一个1位于最右边,当它减去1后,最右边的1会变成0 * 例子:0011减去1后得到0010 * 如果第一个位于第n个位置,当它减去1后,该位置会从1变为0,并在下一个位置由0变成1 * 例子:1100减去1后会得到1010 * i&(i-1)可

2020-07-14 23:19:22 121

原创 18:剪绳子

剪绳子: 一根长度为n的绳子,把绳子剪成m段,n>m>1且n>1,每段绳子的长度即为k[0],k[1]…k[m],求k[0]*k[1]…*k[m]的最大乘积. n是一个给定的绳子长度,m为未知 动态规划: public class Offer19 { public static void main(String[] args) { System.out.println(maxProduct(7)); } /** * 设置f(n)为绳子长度为n时的

2020-07-12 23:35:56 83

原创 Java集合:ArrayList

直接上正菜,先看接口 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ } 接口的解释通常都会出现在接口源码的解释说明的第一行。 AbstractList抽象类: 抽象方法+已实现方法,看看就好 List: 方法接口 RandomAccess: List 实现该标记接口表示

2020-07-11 17:10:32 93

原创 17:机器人的运动范围

机器人的运动范围 存在m行n列的矩阵,一个机器人从(0,0)开始,可以向上、下、左、右走,但是不能进行行坐标和列坐标的数位之和大于k的格子,例如(23,43)的数位之和为 2+3+4+3=12,求机器人能到达多少格子? public class Offer18 { public static void main(String[] args) { System.out.println(movingCount(4,4,4)); } public static int m

2020-07-11 13:16:43 117

原创 16:矩阵中的路径

矩阵中的路径 设计一个函数,用来判断矩阵中是否存在一条包含字符串的路径 public class Offer17 { public static void main(String[] args) { char[][] data= { {'a','s','d'}, {'z','x','c'}, {'q','w','e'}, }; char[] temp = new String("sxw")

2020-07-11 00:03:28 66

原创 Java集合:Iterable接口

直入主题:先看下相关接口及JDK给出的解释 Iterable接口: //实现此接口允许对象成为“ for-each循环”语句的目标 public interface Iterable<T> { //return an Iterator. Iterator<T> iterator(); //给每个元素执行给定的操作,直到处理完所有元素或该操作引发异常为止。除非额外实现该方法 default void forEach(Consumer<? s

2020-07-09 23:41:12 135

原创 15:旋转数组的最小数字

题目:旋转数组的最小数字 一个递增排序数组{1,2,3,4,5},将数组起始往后的若干数据挪到数组的结尾,例如:{3,4,5,1,2,},那生成的数组为原数组的旋转数组之一 思路:用二分查找 特例:{0,1,1,1,1}生成的数组{1,0,1,1,1,}和{1,1,1,0,1}这种情况只能使用遍历数组的方式 public class Offer16 { public static void main(String[] args) { int[] arr = {1, 0,1 , 1, 1}

2020-07-09 21:32:27 59

原创 14:青蛙台阶问题

青蛙台阶问题: 青蛙一次能走1个或2个台阶,n个台阶有几种走法? public class Offer14 { public static void main(String[] args) { System.out.println(frogDo(8)); System.out.println(frogDo2(8)); } /** * 当只有一阶台阶,只有一种走法;当有两阶台阶,有两种走法; * 当台阶数n>2时,走法数关于台阶的函数为f(

2020-07-08 12:16:22 76

原创 13:求斐波那契数列的第n项

求斐波那契数列的第n项 public class Offer13 { /** * 递归方式:n过大,会发生栈溢出 */ public static int fibonacci1(int n){ if(n==0)return 0; if(n==1)return 1; return fibonacci1(n-1)+fibonacci1(n-2); } /** * 循环方式 */ public stati

2020-07-07 21:50:23 781

原创 12:使用两个栈实现队列

使用两个栈实现队列 队列内存在appendTail(),deleteHead(),栈一和栈二,实现appendTail()-队列尾部插入节点和deleteHead()-队列头删除节点功能 栈:先进后出 队列:先进先出 public class Offer12 {} class Queue{ /** * 情况一:如果stack2为空,则直接压栈到stack1 * 情况二:如果stack2不为空,需要把stack2内的元素压倒stack1,再把新数据压倒stack1

2020-07-06 22:49:48 92

原创 11:二叉树的下个节点

二叉树的下一个节点 给定一颗二叉树和其中一个节点,如何找出中序遍历序列的下一个节点? 树节点有三个指针,左子树,右子树,父节点 中序遍历顺序:左-根-右 public class Offer11 { public static TreeNode2 getNextNode(TreeNode2 node){ //如果节点存在右子树,那么他的下个节点为下个右子树的最左节点 if(node.right!=null){ node = node.right;

2020-07-05 16:12:29 86

原创 10:重建二叉树

题目:重建二叉树 输入二叉树的前序遍历和中序遍历重构二叉树,树表示方式为链表 前序遍历:1 2 4 5 3 6 7 ,根-左-右 ,根节点:7,左子树:2 4 5,右子树:3 6 7 中序遍历:4 2 5 1 6 3 7 ,左-根-右 ,根节点:7,左子树:4 2 5,右子树:6 3 7 public class Offer10 { public static void main(String[] args) { int[] preorder = {1,2,4,5,3,6,7};

2020-07-05 15:24:58 102

原创 09:逆序打印一个链表

逆序打印一个链表 用一个栈结构或者一个数组可以,只要保证“先进后出”的准则即可 public class Offer09 { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); Node node5

2020-07-03 23:16:04 107

原创 08:字符串替换空格

题目:替换空格 实现一个函数,存在字符串hello world!!!,将字符串内的空格字符替换为’%20’。 先对空格个数进行计数,得到适当大小的字符数组,接着将原本数组从后向前替换到新数组中。 public class Offer08 { public static void main(String[] args) { String string = "hello world! !"; System.out.println(replaceBlank(string))

2020-07-02 22:23:05 173

原创 07:从一个二维数组中查找一个数

题目:从一个二维数组中查找一个数 数组要求:从左到右,从上到小依次递增的矩形二维数组 思路:我们从矩阵的右上角开始查找,若该位置的数值小于目标值,列数减一;若数值大于目标值,行数加一,后续重复。 public class Offer07 { public static void main(String[] args) { int[][] arr = { {1, 2, 8, 9}, {2, 4, 9, 12},

2020-07-01 23:37:44 226

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除