当前位置: 首页 > news >正文

JAVA练习百题之求矩阵对角线之和

题目:求一个3*3矩阵对角线元素之和

程序分析

求一个3x3矩阵的对角线元素之和,我们需要将矩阵的左上到右下以及左下到右上两条对角线上的元素相加。

一个3x3矩阵如下所示:

1  2  3
4  5  6
7  8  9

左上到右下的对角线元素和为1 + 5 + 9 = 15,左下到右上的对角线元素和为7 + 5 + 3 = 15。

下面我们将使用三种不同的方法来实现这个任务,并分析它们的优缺点。

方法一:使用嵌套循环遍历矩阵

解题思路

我们可以使用嵌套循环遍历矩阵的元素,将左上到右下和左下到右上两条对角线上的元素相加。

实现代码

public class Main {public static void main(String[] args) {int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int sum1 = 0, sum2 = 0;for (int i = 0; i < matrix.length; i++) {sum1 += matrix[i][i];            // 左上到右下的对角线sum2 += matrix[i][matrix.length - 1 - i]; // 左下到右上的对角线}System.out.println("Sum of diagonal elements (left to right): " + sum1);System.out.println("Sum of diagonal elements (right to left): " + sum2);}
}

优缺点

优点:

  • 简单易懂,容易实现。
  • 对于小规模矩阵,性能良好。

缺点:

  • 随着矩阵大小的增加,性能可能下降,时间复杂度为O(n)。

方法二:直接计算

解题思路

我们可以直接计算对角线元素之和,而不需要遍历整个矩阵。对于一个3x3矩阵,左上到右下的对角线元素之和为matrix[0][0] + matrix[1][1] + matrix[2][2],左下到右上的对角线元素之和为matrix[2][0] + matrix[1][1] + matrix[0][2]

实现代码

public class Main {public static void main(String[] args) {int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int sum1 = matrix[0][0] + matrix[1][1] + matrix[2][2]; // 左上到右下的对角线int sum2 = matrix[2][0] + matrix[1][1] + matrix[0][2]; // 左下到右上的对角线System.out.println("Sum of diagonal elements (left to right): " + sum1);System.out.println("Sum of diagonal elements (right to left): " + sum2);}
}

优缺点

优点:

  • 直接计算,不需要遍历整个矩阵,性能较好。
  • 对于小规模矩阵,性能良好。

缺点:

  • 对于大规模矩阵,时间复杂度仍然为O(1),没有显著的性能提升。

方法三:使用循环

解题思路

我们可以使用循环来计算对角线元素之和,避免直接硬编码每个元素的位置。

实现代码

public class Main {public static void main(String[] args) {int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int sum1 = 0, sum2 = 0;for (int i = 0; i < matrix.length; i++) {sum1 += matrix[i][i];            // 左上到右下的对角线sum2 += matrix[i][matrix.length - 1 - i]; // 左下到右上的对角线}System.out.println("Sum of diagonal elements (left to right): " + sum1);System.out.println("Sum of diagonal elements (right to left): " + sum2);}
}

优缺点

优点:

  • 使用循环计算,不需要硬编码每个元素的位置,具有一定的灵活性。
  • 对于小规模矩阵,性能良好。

缺点:

  • 对于大规模矩阵,时间复杂度仍然为O(n)。

总结

对于小规模矩阵,三种方法的性能都较好,且实现都相对简单。方法一和方法三具有一定的灵活性,可以用于不同大小的矩阵,但时间复杂度为O(n)。方法二直接计算,性能也较好,但不具备灵活性。

综合考虑,如果只处理小规模矩阵,方法一或方法三都可以选择,取决于个人喜好。如果需要处理大规模矩阵,方法二是一个更好的选择,因为它的时间复杂度是常数级的,不受矩阵大小的影响。

http://www.lryc.cn/news/186136.html

相关文章:

  • MEM备考打卡
  • 短视频矩阵源码开发部署---技术解析
  • 百度小程序制作源码 百度引流做关键词排名之技巧
  • 【计算机组成 课程笔记】7.3 高速缓存 Cache
  • vscode搭建c/c++环境
  • macOS Sonoma 14.0(23A344) 正式版带 OpenCore 0.9.6 和 FirPE 三分区镜像
  • 神经网络(MLP多层感知器)
  • git与github的交互(文件与文件夹的上传)
  • Visual Studio常见编译错误记录
  • 如何应对数据安全四大挑战?亚马逊云科技打出“组合拳”
  • JavaScript——数据类型、类型转换
  • C位操作符
  • 【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态
  • numString.charAt(i) - ‘0‘
  • 《Python 自动化办公应用大全》书籍推荐(包邮送书五本)
  • day57:ARMday4,程序状态寄存器读写指令、软中断指令、C和汇编的混合编程、开发板介绍
  • el-cascader
  • 图论第3天----第841题、第463题
  • 软件测试/测试开发丨利用ChatGPT 生成自动化测试脚本
  • 3.3.OpenCV技能树--二值图像处理--图像形态学操作
  • 这15个海运提单的雷区 你知道吗?
  • 几道web题目
  • API接口大全分享,含短信API、IP查询API。。。
  • 记录一次springboot使用定时任务中@Async没有生效的场景
  • 腾讯云/阿里云国际站免费账号:腾讯云国际站如何对象存储cos设置防盗链
  • python编程:使用 Pillow 将照片转换为1寸报名照片
  • Aria2 for Mac (免HomeBrew)
  • 【Java】微服务——Gateway网关
  • 大厂笔试汇总
  • 【数据结构】快排的详细讲解