笔记整理
未读一、反射概述1. 什么是反射?反射(Reflection),Java 中的反射机制是指,Java 程序在运行期间可以获取到一个对象的全部信息。
反射机制一般用来解决Java 程序运行期间,对某个实例对象一无所知的情况下,如何调用该对象内部的方法问题。
2. 反射机制原理反射机制允许 Java 程序在运行时调用Reflection API取得任何类的内部信息(比如成员变量、构造器、成员方法等),并能操作类的实例对象的属性以及方法。
在Java 程序中,JVM 加载完一个类后,在堆内存中就会产生该类的一个 Class 对象,一个类在堆内存中最多只会有一个 Class 对象,这个Class 对象包含了该类的完整结构信息,我们通过这个 Class 对象便可以得到该类的完整结构信息。
这个 Class 对象就像是一面镜子,我们透过这面镜子可以清楚地看到类的结构信息。因此,我们形象的将获取Class对象的过程称为:反射。
==Java 反射机制原理示意图:==
3. 反射优点和缺点
优点:可以动态地创建和使用对象,反射机制是 Java 框架的底层核心,其使用灵活,没有反射机制,底层框架就失去支 ...
64. 最小路径和——minimum-path-sum给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
123输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。
示例 2:
12输入:grid = [[1,2,3],[4,5,6]]输出:12
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 200
我的错误代码1234567891011121314151617181920212223242526272829class Solution { public int minPathSum(int[][] grid) { int n = grid.length; // n是列 int m = gri ...
62. 不同路径——unique-paths一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 1:
12输入:m = 3, n = 7输出:28
示例 2:
1234567输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -> 向右 -> 向下
示例 3:
12输入:m = 7, n = 3输出:28
示例 4:
12输入:m = 3, n = 3输出:6
提示:
1 <= m, n <= 100
题目数据保证答案小于等于 2 * 109
方法一:动态规划思路与算法
我们用 f(i,j) 表示从左上角走到 (i,j) 的路径数量,其中 i 和 j 的范围分别是 [0,m) 和 [0,n)。
由于我们每一步只能从向下或者向右 ...
56. 合并区间——merge-intervals以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
123输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
123输入:intervals = [[1,4],[4,5]]输出:[[1,5]]解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
示例 3:
123输入:intervals = [[4,7],[1,4]]输出:[[1,7]]解释:区间 [1,4] 和 [4,7] 可被视为重叠区间。
提示:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi ...
55. 跳跃游戏——jump-game给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
示例 1:
123输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
示例 2:
123输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
提示:
1 <= nums.length <= 104
0 <= nums[i] <= 105
这题说的是每次跳跃的最大长度是该下标的值
我的第一想法是递归,从第一个元素开始,从最大开始跳,不行就跳的距离-1
我的错的离谱的答案1234567891011121314151617181920212223class Solution { bo ...
53. 最大子数组和——maximum-subarray给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
示例 1:
123输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
12输入:nums = [1]输出:1
示例 3:
12输入:nums = [5,4,-1,7,8]输出:23
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
我的部分正确答案1234567891011121314151617181920212223242526class Solution { public int maxSubArray(int[] nums) { // 定义当前和最大值和全局中和的最大值 int currSum; int globSum = 0; ...
49. 字母异位词分组——group-anagrams给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,”tan”],[“ate”,”eat”,”tea”]]
解释:
在 strs 中没有字符串可以通过重新排列来形成 "bat"。
字符串 "nat" 和 "tan" 是字母异位词,因为它们可以重新排列以形成彼此。
字符串 "ate" ,"eat" 和 "tea" 是字母异位词,因为它们可以重新排列以形成彼此。
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100 ...
回调+异步任务处理
模拟 “客户端发消息给服务端,服务端处理后(延迟 5 秒)回调通知客户端” 的流程
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576import java.lang.Thread;// 1. 定义回调接口:约定服务端处理完后要调用的方法interface CSCallback { // 服务端处理完成后,回调客户端的这个方法传递状态 void process(String status);}// 2. 服务端类:接收消息、处理、回调客户端class Server { // 方法参数用接口CSCallback:接收“实现了该接口的客户端对象” public void getClientMsg(CSCallback csCallback, String msg) { ...
48. 旋转图像——rotate-image给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
示例 1:
12输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]
示例 2:
12输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
提示:
n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
📄 方法一:使用辅助数组 (Method One: Using an Auxiliary Array)我们以题目中的示例二
$$\begin{bmatrix ...
一、单选1.握手定理无向图G有23条边,度为4的顶点有5个,度为3的顶点有4个,其余都是度2的顶点,则图G最多有( )个顶点。
关键依据:握手定理==无向图中所有顶点的度数之和等于边数的 2 倍。==
已知边数为 23,因此总度数之和为 23×2=46。
计算过程
先算已知度数的顶点贡献的总度数:度为 4 的 5 个顶点总度数为 4×5=20,度为 3 的 4 个顶点总度数为 3×4=12,两者相加共 32。
剩余总度数为 46-32=14,由度为 2 的顶点承担。
度为 2 的顶点数量为 14÷2=7。
总顶点数为 5(度 4)+4(度 3)+7(度 2)=16。
4.邻接表 边表结点若邻接表中有奇数个边表结点,则一定是( )。
A.图中有奇数个结点
B.图中有偶数个结点
C.图为无向图
D.图为有向图
边表结点的定义在图的邻接表存储结构中,每个顶点会对应一个链表(称为边表),链表中的每个结点就是边表结点。所以是D
5.迪杰斯特拉对如下有向带权图,若采用迪杰斯特拉算法求从源点a到其他各顶点的最短路径,则得到的第一条最短路径的目标顶点是b,第二条最短路径的目标 ...


