每天一小步 | 豆包MarsCode AI刷题

80 阅读4分钟

学习方法与心得

题目解析

问题描述

题目要求对矩阵进行调整:

  • 如果矩阵中的某个值是偶数,则将其变为原值的三倍。
  • 如果是奇数,则保持值不变。

输入和输出都是二维数组,结果需要返回调整后的矩阵。

解题思路

1. 矩阵遍历
  • 使用双层循环遍历矩阵中的每一个元素:
    • 第一层循环处理每一行。
    • 第二层循环处理每一行中的每个元素。
2. 偶数判断与操作
  • 使用取模运算 % 判断一个数是否为偶数:
    • a[i][j] % 2 == 0,说明是偶数,将其值乘以3
    • 否则直接保留原值。
3. 存储结果
  • 创建一个新的矩阵 result,用于存储调整后的值,确保原矩阵 a 不被修改(避免副作用)。

代码实现

以下是完整的代码:

import java.util.Arrays;

public class Main {
    public static int[][] solution(int[][] a) {
        // 创建一个新的矩阵来存储结果
        int[][] result = new int[a.length][a[0].length];
        
        // 遍历矩阵中的每一个元素
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                // 判断当前元素是奇数还是偶数
                if (a[i][j] % 2 == 0) {
                    // 如果是偶数,将其值变为原来的三倍
                    result[i][j] = a[i][j] * 3;
                } else {
                    // 如果是奇数,保持不变
                    result[i][j] = a[i][j];
                }
            }
        }
        
        return result;
    }

    public static void main(String[] args) {
        // 测试用例
        System.out.println(Arrays.deepEquals(solution(new int[][]{{1, 2, 3}, {4, 5, 6}}), new int[][]{{1, 6, 3}, {12, 5, 18}}));
        System.out.println(Arrays.deepEquals(solution(new int[][]{{7, 8, 9}, {10, 11, 12}}), new int[][]{{7, 24, 9}, {30, 11, 36}}));
        System.out.println(Arrays.deepEquals(solution(new int[][]{{2, 4}, {6, 8}}), new int[][]{{6, 12}, {18, 24}}));
    }
}

核心算法分析

1. 时间复杂度

双层循环遍历矩阵,每个元素访问一次,因此时间复杂度为 O(m × n),其中m是矩阵的行数,n是列数。

2. 空间复杂度

需要一个与输入矩阵相同大小的结果矩阵 result,因此空间复杂度为 O(m × n)

3. 偶数判断与操作

  • 使用简单的取模运算 %,判断偶数的时间复杂度为 O(1)
  • 若是偶数,进行乘法运算,复杂度同样为 O(1)

4. 适用场景

本算法适用于矩阵遍历和基于条件的元素操作,灵活性高,可扩展为多种复杂规则的处理。


知识总结

通过这道题目,我学习并总结了以下知识点:

1. 二维数组的遍历与操作

  • 二维数组的遍历需要双层循环,外层遍历行,内层遍历列。
  • 使用 a[i][j] 的方式访问数组中的元素,简单直观。

2. 取模运算的应用

  • 判断奇偶性的简单方式是取模运算 %,它是数学操作在编程中的高效应用之一。

3. 数据结构的隔离

  • 创建独立的结果矩阵 result 是一种良好的编程习惯,可以避免对原数据进行修改,增加程序的鲁棒性和可维护性。

学习计划

1. 逐步练习二维数组问题

结合豆包MarsCode AI题库,逐步从基础的二维数组遍历问题,练习到更复杂的矩阵操作问题,如矩阵旋转、矩阵翻转等。

2. 掌握数学运算在编程中的应用

针对取模、取整、绝对值等数学操作,多练习它们在条件判断、循环控制等方面的应用。

3. 记录错题与心得

将每次题目的难点、易错点总结为文字描述,方便回顾和分享。


工具运用

1. 豆包MarsCode AI解析功能

  • 理解题目核心思路,快速掌握解题方式和优化技巧。

2. 结合测试数据调试代码

  • 利用测试用例检查代码的正确性,同时覆盖不同边界条件,如空矩阵、全奇数或全偶数矩阵等。

3. 参考在线文档与社区讨论

  • 阅读Java数组和矩阵操作的官方文档,了解更多高级用法。

学习建议

  1. 理解题目核心逻辑
    不要急于下手写代码,先思考解题流程,理解题目规则,尤其是条件判断部分。

  2. 保持良好的代码习惯
    在实际开发中,尽量避免直接修改输入数据,通过新变量存储结果以提高代码的安全性和可读性。

  3. 逐步提高难度
    从简单的矩阵遍历题入手,逐渐挑战复杂的矩阵变换、动态规划问题等,积累经验。

通过这道题目,希望每位学习者都能深入理解矩阵操作的基本方法,为解决更复杂的问题打下基础!