104.二叉树的最大深度
104.二叉树的最大深度给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
123456789public class Solution{ public int maxDepth(TreeNode root){ return dfs(root,0); } private int dfs(TreeNode root,int depth){ if(root==null) return depth; return Math.max(dfs(root.left),dfs(root.right))+1; }}
105.相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
123456789101112public class Solution{ public boolean isSameTre ...
198.打家劫舍
198.打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
思路
本质上就是加不加上当前值的问题
只不过初始值dp[0],dp[1]需要分析
dp[1]表示对第二间房子偷不偷,那么就是要么偷第一间,要么偷第二间
123456789101112131415161718192021222324252627282930313233package com.wereash.scut_hot100.dp;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-09 21:19 **/public class Solution198 { public static void main(String[] args){ Scanner scan ...
200.岛屿数量
200.岛屿数量给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
思路
由于四条边都被水包围,只要有陆地存在,肯定存在一个岛屿
同处于一个岛屿的陆地,那么陆地A必然与陆地B的上下左右一个方向相连接
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package com.wereash.scut_hot100.digui;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-08 19:28 **/public class Solution200 { public static void main(String[] args){ Scann ...
1796.字符串中第二大的数字
1796.字符串中第二大的数字给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。
混合字符串 由小写英文字母和数字组成。
1234567891011121314151617181920class Solution { public int secondHighest(String s) { char[] str=s.toCharArray(); int maxMax=-1; int minMax=-1; for(int i=0;i<str.length;i++){ if(!Character.isDigit(str[i])){ continue; } int temp=str[i]-'0'; if(temp>maxMax){ minMax ...
674.最长连续递增子序列
674.最长连续递增子序列给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。
123456789101112131415class Solution { public int findLengthOfLCIS(int[] nums) { int max=1; int cur=max; for(int i=1;i<nums.length;i++){ if(nums[i]>nums[i-1]){ cur++; }else{ cur=1; ...
345.反转字符串中的元音字母
345.反转字符串中的元音字母给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。
思路思路一
map
用index记录是当前出现的第几个元音字母
倒序index–,代替元音字母
1234567891011121314151617181920212223242526272829303132333435363738394041package com.wereash.scut_hot100.stack;import java.util.Deque;import java.util.HashMap;import java.util.LinkedList;import java.util.Map;/** * @Author: WereAsh * @Date:2026-02-05 14:45 **/public class Solution345 { public static void m ...
058.螺旋矩阵
54.螺旋矩阵给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路:
遍历顶部top++
遍历右部right--
遍历底部down--
遍历左部left++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package com.wereash.scut_hot100.matrix;import java.util.ArrayList;import java.util.List;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-03 20:44 **/public class Solution054 { public static void main(String[] args){ Scanner scanner=new Scanner(Syst ...
048.旋转图像
48.旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在** 原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
思路:
先转置
在中心轴对称交换
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657package com.wereash.scut_hot100.matrix;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-02 19:59 **/public class Solution048 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int n=scanner.nextI ...
072.矩阵置零
73.矩阵置零给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地算法。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455package com.wereash.scut_hot100.count;import java.util.Scanner;/** * @Author: WereAsh * @Date:2026-02-01 19:28 **/public class Solution072 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); System.out.print("请输入矩阵的维度:"); int n=scanner.nextInt(); scanner. ...







