自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 332.重新安排行程

332.重新安排行程题解​ 本题的题意就是找到以JFK为起点的欧拉通路,而且需要找到字典序最小的那个结果。所以我们使用优先队列来实现,普通的队列的特点是先进先出,优先队列的特点是先弹出优先度最高的节点。但我们如果直接走字典序最小的路,可能会走到一个死胡同,无法达成使用每一张机票的目的,所以我们要把会走到死胡同的节点放到最后遍历。​ 至于如何实现,只有该节点还没走到死胡同,就继续递归,递归不会停止。直至遇到死胡同,然后从死胡同那个节点开始入栈,再将栈内容反转即可。...

2020-08-28 20:47:12 219 1

原创 679.24点游戏

679.24点游戏题解​ 先找出4个数字所有不同的排列组合,然后再去一一判断四个数前两个数加减乘除,四个数变为两个数,得到三个数一一判断前两个数加减乘除,三个数变为两个数,判断这两个数加减乘除和24的关系即可。class Solution { public boolean judgePoint24(int[] nums) { return backTrack(nums, 0); } // 第一步:求出所有排列,一一验证 public boolean

2020-08-23 09:44:01 993

原创 111.二叉树的最小深度

111.二叉树的最小深度题解​ 当节点为空,则树为一颗空树,深度为0.当左右子节点都为空,则找到了叶子节点,为最终的高度加一。当左右子节点不为空则往下递归,在递归的过程中高度不断叠加。class Solution { public int minDepth(TreeNode root) { if(root == null){ return 0; } if(root.left == null && root

2020-08-21 23:25:20 157

原创 529. 扫雷游戏

529. 扫雷游戏题解​ 对于图形变换的问题我们常常使用广度优先与深度优先算法。一般深度优先算法会较为方便。首先我们构造点周围的一一对应的两个数组dirX和dirY用于遍历。这样的操作使得我们不需要写大量的if语句判断是否会越界。先判断点是否为地雷,然后把周围8个点遍历一遍获得需要标记的地雷数量。再进行递归即可。class Solution { int[] dirX = {0, 1, 0, -1, 1, 1, -1, -1}; int[] dirY = {1, 0, -1, 0, 1

2020-08-21 00:41:14 162

原创 647.回文子串

647.回文子串题解​ 计算回文串的个数,使用回文中心法时间复杂度会更优,即以当前字符为中心,向左右两边遍历,若不同则移动字符中心。可以发现每个长度为n的字符串,能且只能生成2n-1组回文组合,从0遍历到2n-2即可统一n为奇数和偶数的情况。class Solution { public int countSubstrings(String s) { int n = s.length(), ans = 0; for (int i = 0; i < 2 *

2020-08-19 23:32:52 163

原创 109.有序链表转换二叉搜索树

109.有序链表转换二叉搜索树题解​ 要达到左右平衡的目的,需要有序单链表当中找到中间节点作为树的根节点的值,这样两边的高度才能差不多。需要注意的是,当单链表的节点为偶数,位于中间的两个节点都可作为根节点的值,递归建树即可。class Solution { ListNode globalHead; public TreeNode sortedListToBST(ListNode head) { globalHead = head; int lengt

2020-08-18 22:25:57 127

原创 110.平衡二叉树

110.平衡二叉树题解​ 本题主要是求出二叉树左右子树高度,求出后递归比较即可。 public boolean isBalanced(TreeNode root) { if (root == null) { return true; } else { return Math.abs(height(root.left) - height(

2020-08-17 20:39:42 137

原创 733.图像渲染

733.图像渲染题解​ 后续的操作类似,使用递归算法,深度优先搜索。注意要保留原有颜色来递归。class Solution { int[] dx = {1, 0, 0, -1}; int[] dy = {0, 1, -1, 0}; public int[][] floodFill(int[][] image, int sr, int sc, int newColor) { int currColor = image[sr][sc]; if (

2020-08-16 23:54:26 148

原创 546. 移除盒子

546. 移除盒子题解​ 本题可能的情况很多,显然要用dp动态规划。这里的状态转移方程并不好想,大致可分为两种情况。设f(l,r,k)为在区间(l,r)中,r右边与r处相同的元素有k个的最大积分。①将r及r右边相同的元素点爆,得到积分(k+1)^2,左边积分为f(l,r-1,0)②从最左边开始找和r处相同的元素,将该元素和r之间所有电灯泡点爆,若相同处为i,得积分f(i+1,r-1,0),剩余得积分f(l,r,k+1)class Solution { public int rem

2020-08-15 23:31:01 123

原创 20.有效的括号

20.有效的括号题解​ 本题需要匹配后进的符号,所以用到"后进先出"的栈,需要括号有效,则每当遇到)}],都需要栈顶元素为({[。符合则弹出栈顶元素,否则返回false即可。class Solution { public boolean isValid(String s) { int n = s.length(); if (n % 2 == 1) { return false; } Map<Cha

2020-08-14 22:11:14 148

原创 43. 字符串相乘

43. 字符串相乘题解​ 我们可以把字符串中的每一位,拿出来和另一个字符串的每一位相乘。存入数组中,再将超过10的数组元素向前进,保留个位。因为位数可能会很大,超出字符串本身的最大位数,所以我们用字符串拼接的方式输出。class Solution { public String multiply(String num1, String num2) { if (num1.equals("0") || num2.equals("0")) { return

2020-08-13 22:20:31 139

原创 133.克隆图

133.克隆图题解​ 本题就是单单克隆图的值和结构,而不克隆地址。我们遍历克隆节点,需要一个哈希表记录节点中连接记录的键值对,防止死循环。随后递归克隆即可。class Solution { private HashMap <Node,Node> visited = new HashMap<> (); public Node cloneGraph(Node node) { if(node == null){ return

2020-08-12 23:59:16 727

原创 SpringBoot

SpringBoot优点入门快开箱即用,提供各种默认配置来简化项目内嵌式容器简化Web项目省去xml配置的"配置地狱"微服务​ 以前的项目都是一个整体,微服务的思想就是把一个个小的模块独立开来。把独立出来的功能元素动态组合,需要的功能元素才组合。节省了调用资源每个功能元素的服务都是一个可替换的,可独立升级的软件代码。官方提供了一个快速生成SpringBoot项目的网站,IDEA默认使用。SpringBoot配置server.port=8081SpringBoot项目默

2020-08-12 23:37:53 299

原创 130.被围绕的区域

130.被围绕的区域题解​ 从边界处的O出发,把所有与边界O相连的O都标记为A,方便后续将所有剩余的O替换成X,所有的A替换成O。class Solution { int n, m; public void solve(char[][] board) { n = board.length; if (n == 0) { return; } m = board[0].length;

2020-08-11 23:06:56 119

原创 696.计数二进制字串

696.计数二进制字串题解​ 本题有一个隐藏结论:由形如00111,或11100的字符串,符合要求的字串数量为Math.min(n,m),其中n,m为连续字符的个数,如000111111的n=3,m=6。而得到连续字符序列{1,3,2,3},表示字符串若为0开头,则是011100111,符合要求的字串数量为min(1,3)+min(3,2)+min(2,3)class Solution { public int countBinarySubstrings(String s) {

2020-08-10 20:35:01 131

原创 93.复原IP地址

93.复原IP地址题解​ 因为要找出所有可行的ip地址,我们需要选择个位数、十位数、小于255的百位数(十六进制的0XFF)分别遍历。因为后续操作十分类似,我们可以选择使用递归。当遍历到了字符串末尾,操作完成。当ip地址的四段都已确定,而字符串还未遍历完,操作完成。当下一字符为0,后一段ip只能为单一的0。当选择的数超过255,for循环中必须break。class Solution { List<String> res = new LinkedList<&gt

2020-08-09 21:34:34 167 1

原创 99.恢复二叉搜索树

99.恢复二叉搜索树题解前序可以很方便地形成一条搜索路径,中序遍历BST的时候可以得到一个有序序列,后序可以用来计算一颗算数表达式树​ 运用空间复杂度O(1)的Morris算法进行中序遍历(本题与二叉树顺序相关,使用中序遍历),先找到当前节点左子树的最右的节点(即前驱节点,中序遍历的最后一个节点),如果前驱节点为空,将其右节点指向当前节点如果前驱节点不为空,说明前驱节点已经指向当前节点,说明我们已经遍历完了当前节点的左子树,我们必须将前驱节点的右节点置空(只是利用这个节点暂存数据,起到

2020-08-08 20:35:23 164

原创 336.回文对

336.回文对题解​ 本来暴力可破,到了115/134个用例时超过了时间限制。本题可用字典树优化暴力算法。先把各个字符串倒序插入字典树,可分三种情况。①字典树中有当前字符串的翻转单词 符合题意②当前字符串是回文串,那么可以查找字典树中的空字符③普通情况 检查当前字符串前j个字符组成的字符串是不是回文串,若是则检索字典树时候存在后面部分的翻转即可。 同理可从后面开始检查,提高效率class Solution { public class Trie { Trie[] nex

2020-08-06 21:18:44 185

原创 SpringMVC

SpringMVCMVC架构Controller控制层获取前端信息调用业务逻辑跳转页面Model模型层业务逻辑保存数据的状态View显示页面依赖<?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"

2020-08-06 12:46:24 166

原创 337.打家劫舍Ⅲ

337.打家劫舍Ⅲ题解​ 使用深度优先搜索,分使用根节点和不使用根节点两种情况,递归搜索左右子节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public

2020-08-05 18:43:24 153

原创 Spring

Spring依赖<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version></dependency> <dependency> <grou

2020-08-05 10:41:24 264

原创 207.课程表

207.课程表题解​ 用数组记录每个课程的入读,如果某课程的入读为0,把课程推进队列。将队列课程逐一推出,则将需要该课程的课程入度减一,若入读为0,则又将该课程推进队列。将当队列为空,若课程数等于推出数,则为true,否则为false。class Solution { List<List<Integer>> edges; int[] indeg; public boolean canFinish(int numCourses, int[][] pre

2020-08-04 21:56:11 128

原创 415.字符串相加

415.字符串相加题解​ 获取每一位的数字之和,保留个位,前面的十位若有进一,拼接字符串,最后返回反转的字符串。class Solution { public String addStrings(String num1, String num2) { int i =num1.length()-1, j = num2.length()-1, add = 0; StringBuffer ans = new StringBuffer();

2020-08-03 23:16:55 128

原创 114.二叉树展开为链表

114.二叉树展开为链表题解​ 展开后,单链表的访问顺序就是树的前序遍历顺序,所以先进行前序遍历保存在list中,再构建单链表,左节点都为空。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { thi

2020-08-02 20:41:42 109

原创 144.二叉树的前序遍历

144.二叉树的前序遍历题解​ 每次迭代弹出栈顶元素,记录其根数值,按次序将其右孩子、左孩子压入栈中,/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { publi

2020-08-02 20:41:11 131

原创 632.最小区间

632.最小区间题解​ 最小区间的最大值必定是全部序列的最小值中的最大值,遍历可得。最小区间的最小值必定来自于全部序列的最小值中的最小值的所在序列。将新序列最小值弹出,把所在序列的下一元素收入队列。为了缩小新序列长度直到求到最小区间,不断重复以上操作,直到新序列的最小值为所在序列的最大元素。class Solution { class NumGroup{ public NumGroup(int num, int grp){ this.num = num

2020-08-01 21:42:04 228

空空如也

空空如也

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

TA关注的人

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