likes
comments
collection
share

⚡每日算法&面试题⚡一起肥学1️⃣

作者站长头像
站长
· 阅读数 23

🌟算法题

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例1: ⚡每日算法&面试题⚡一起肥学1️⃣

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例二: ⚡每日算法&面试题⚡一起肥学1️⃣

输入: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]]
示例 3

输入:matrix = [[1]]
输出:[[1]]
示例 4

输入:matrix = [[1,2],[3,4]]
输出:[[3,1],[4,2]]
 
提示:

matrix.length == n
matrix[i].length == n
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000

🌟一点点思路

千万别去想着真的把数组里的某个元素给移到那个位置,这样太麻烦而且题目也明确说了。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

所以我们来看看规律 ⚡每日算法&面试题⚡一起肥学1️⃣ 是不是发现了对于矩阵中第 ii 行的第 jj 个元素,在旋转后,它出现在倒数第 ii 列的第 jj 个位置。 好了我们来代码实现

🌟源码和详解

class Solution {
    public void rotate(int[][] matrix) {
    //得到行数
        int n = matrix.length;
        //建立一个二维数组
        int[][] matrix_new = new int[n][n];
        //接下来的都是为了这句话对于矩阵中第 ii 行的第 jj 个元素,
        //在旋转后,它出现在倒数第 ii 列的第 jj 个位置
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix_new[j][n - i - 1] = matrix[i][j];
            }
        }
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix[i][j] = matrix_new[i][j];
            }
        }
    }
}

🌟面试题

面试官:说一下Java反射机制的应用场景 首先了解反射的优势和劣势

反射的优势和劣势 个人理解,反射机制实际上就是上帝模式,如果说方法的调用是 Java 正确的打开方式,那反射机制就是上帝偷偷开的后门,只要存在对应的class,一切都能够被调用。

那上帝为什么要打开这个后门呢?这涉及到了静态和动态的概念

静态编译:在编译时确定类型,绑定对象 动态编译:运行时确定类型,绑定对象 两者的区别在于,动态编译可以最大程度地支持多态,而多态最大的意义在于降低类的耦合性,因此反射的优点就很明显了:解耦以及提高代码的灵活性。

因此,反射的优势和劣势分别在于:

优势

运行期类型的判断,动态类加载:提高代码灵活度

劣势

性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多

应用场景 1·

JDBC 的数据库的连接 在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成

通过Class.forName()加载数据库的驱动程序 (通过反射加载,前提是引入相关了Jar包)

通过 DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码

通过Connection 接口接收连接

2· Spring 框架的使用

Spring 通过 XML 配置模式装载 Bean 的过程:

将程序内所有 XML 或 Properties 配置文件加载入内存中 Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息 使用反射机制,根据这个字符串获得某个类的Class实例 动态配置实例的属性