自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 剑指offer-栈的压、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。...

2021-03-27 10:33:47 57

原创 剑指offer-顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。思路:主要考察边界条件的判断,从左到右,从上到下,从右到左,从下到上依次打印。class Solution { public int[] spiralOrder(int[][] matrix) { if (matrix == null || matrix.length == 0){ return new int[0]; } int l = 0, r = matri

2021-02-27 20:28:55 58

原创 剑指offer-对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。思路:从顶至底递归,逐次比较每对节点是否相同./** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Sol

2021-02-27 17:35:12 49

原创 剑指offer-二叉树的镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。思路:递归或者栈。递归交换每个节点的左右节点,实现得到二叉树镜像。注意要先暂存树的左子节点,如果不暂存的话递归完右子节点后左子节点的值就改变了。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { v

2021-02-03 19:28:44 65 1

原创 SSM框架整合

①配置pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.

2021-01-03 19:06:28 54

原创 SpringMVC

①配置父类的pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apac

2020-12-30 21:59:44 39

原创 剑指offer-树的子结构

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。思路:前序遍厉A数,找到与B数根节点相同值的节点,然后递归比较该节点的左子节点和右子节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tre

2020-12-30 09:37:27 45

原创 剑指offer-合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。思路:递归。先比较两个链表的头节点,然后递归调用比较后续节点。要注意先决条件。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { publi

2020-12-29 10:29:15 44

原创 剑指offer-反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思路:方法一:递归。链表不断向后递归,直到递归至尾节点,改变链表指针的方向。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public

2020-12-28 21:50:13 41

原创 剑指offer-链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。思路:双指针。第一个指针先走k步,然后两个指针一起走,当第一个指针为空,第二个指针对应的就是倒数第k个节点;或者第一个指针先走k-1步,然后一起走,当第一个指针走到尾节点,第二个指针就是倒数第k个节点。还可以用栈的方法,但是需要O(N)额外空间。/** * Defini

2020-12-27 10:31:45 80

原创 剑指offer-调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:双指针,一个指针从头开始,找第一个偶数;一个指针从尾开始,找第一个奇数,找到后交换。class Solution { public int[] exchange(int[] nums) { int i = 0, j = nums.length - 1; while (i < j){ while (i < j

2020-12-26 12:34:04 29

原创 剑指offer-表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是思路:要综合考虑到各种情况class Solution { public boolean isNumber(String s) { if (s == null || s.length() == 0){ re

2020-12-26 10:50:37 45

原创 剑指offer-删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。思路:单指针,找到需要删除的节点的前一个节点即可。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public Li

2020-12-24 22:14:41 44

原创 Spring

1.HelloSpring①创建一个hello实体类package com.li.pojo;public class Hello { private String str; public String getStr() { return str; } public void setStr(String str) { this.str = str; } @Override public String toSt

2020-12-24 20:17:58 94

原创 剑指offer-数值的整数次方

实现库函数pow的功能,求x的n次方。思路:二分法,每次将n变为原来的一半,将x变为x平方。如果n为偶数,直接二分;如果n为奇数,先分离一个x出来,再对n二分。当n为负数,要将x变为1/x,将n变为-n,但是java中int32变量n∈[−2147483648,2147483647],所以当n=−2147483648时执行n=-n会产生大数越界现象,可以先将n存入long型变量b,后面用b操作。或者可以先提出一个1/x,返回1/x*myPow(1/x,-n-1),这样可以保证n=2147483648-

2020-12-22 21:57:14 41

原创 Mybatis-动态SQL

先修改核心配置文件 <mappers> <mapper class="com.li.dao.BlogMapper"/> </mappers>Blog实体类:package com.li.pojo;import lombok.Data;import java.util.Date;@Datapublic class Blog { private String id; private String title;

2020-12-22 15:23:43 52

原创 剑指offer-二进制中1的个数

请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。思路:把一个整数减1之后和该整数做与运算,可以把整数二进制表示中最右边的1变成0,直到该整数变成0,就可以统计出1的个数public class Solution { public int hammingWeight(int n) { int res = 0; while (n != 0)

2020-12-21 22:08:52 34

原创 剑指offer-机器人的运动范围

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?思路:与矩阵中的路径一题一致,用深度优先搜索(DFS)方法,走过的格子...

2020-12-19 21:43:45 126 1

原创 Mybatis中多对一和一对多

两张表学生表:老师表:多对一:多个学生对应一个老师,查询所有学生的老师的姓名两种方式:①子查询先查所有学生信息,再根据查询出学生的tid,寻找对应的老师。 <select id="getStudent" resultMap="StudentTeacher"> select * from student; </select> <resultMap id="StudentTeacher" type="Student

2020-12-19 20:22:08 70 1

原创 剑指offer-矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。思路:深度优先搜索DFS + 剪枝,从下上右左四个方向递归。访问过的元素先设为空,递归后还原。class Solution { public boolean exist(char[][] board

2020-12-18 22:06:22 68 2

原创 Mybatis配置

mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <properties resource="db

2020-12-18 18:44:54 66 1

原创 剑指offer-旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。思路:我们要找到旋转后的数组中最小的元素,排序数组的查找问题首先考虑的方法就是二分法。观察旋转后的数组,发现可以分为两部分,左数组[3,4,5],右数组[1,2]。右数组每个元素都小于左数组,定义m=(i+j)/2,判断nums[m]和nums[j]的大小关系,如果nums[m]小于num

2020-12-17 22:13:37 47

原创 剑指offer-青蛙跳台阶

思路:与斐波那契数列一致,用动态规划思想。n级台阶,一次只能跳一步或者两步,n=1时一种跳法,n=2两种跳法,当n>2时,分情况讨论,第一次跳一步,后续为f(n-1)种跳法;否则为f(n-2)种跳法。class Solution { public int numWays(int n) { int a = 1, b = 1, sum = a + b; for (int i = 0; i < n; i++){ sum = (a + b

2020-12-17 21:37:16 34

原创 剑指offer-斐波那契数列

思路:不能使用递归!会有大量重复计算!比如计算f(n),需要先计算f(n-2)和f(n-1),计算f(n-2)需要f(n-3)和f(n-4),计算f(n-1)需要f(n-2)和f(n-3),产生重复计算。应该考虑使用动态规划方法,初始化a=0,b=1,sum=a+b,可以用sum使a和b交替前进。class Solution { public int fib(int n) { int a = 0, b = 1, sum; for (int i = 0; i &lt

2020-12-17 21:19:13 33

原创 剑指offer-两个栈实现队列

思路:两个栈,一个用来给队列尾部插入节点,一个用来队列头部删除节点。即栈A实现入队,栈B实现出队。实现栈可以用Stack或者LinkedList,Stack是数组,LinkedList是链表。通常不推荐使用Stack,效率较低。频繁地插入删除操作推荐使用LinkedList。class CQueue { Stack<Integer> A,B; public CQueue() { A = new Stack<>(); B = new S

2020-12-15 21:09:38 49

原创 剑指offer-重构二叉树

思路:给定前序遍历和中序遍历,首先可以从前序遍厉的第一个元素找到二叉树的头节点,通过头节点的值去中序遍历中找到对应位置,该位置记为index,index左侧为左子树,右侧为右子树,同时也知道了左右子树的节点个数,通过递归实现重构二叉树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *

2020-12-15 19:21:30 76

原创 剑指offer-从尾到头打印链表

思路:①栈。先进后出,将原链表所有节点压入栈中,再依次弹出,实现逆序打印。②递归。访问节点时,先递归输出后面的节点,再输出自身节点。//栈public class Test{ public int[] reversePrint (ListNode head){ Stack<ListNode> stack = new Stack<>(); while (head != null){ //所有节点入栈 stack.

2020-12-15 10:50:59 38

原创 剑指offer-替换空格

重刷剑指offer day011.替换空格实现一个函数,把字符串每个空格替换成“%20”思路:在JAVA中,字符串不可以被修改,需要新建一个字符串实现。而C++中,字符串可以修改,可以在原字符串原地修改。public class Test{ public String replaceSpace(String s){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i++){ if

2020-12-14 21:45:04 83

空空如也

空空如也

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

TA关注的人

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