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.mzph.cn/news/102177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息系统项目管理师第四版学习笔记——配置与变更管理

配置管理 管理基础 配置管理是为了系统地控制配置变更&#xff0c;在信息系统项目的整个生命周期中维持配置的完整性和可跟踪性&#xff0c;而标识信息系统建设在不同时间点上配置的学科。 配置项的版本号规则与配置项的状态定义相关。例如&#xff1a;①处于“草稿”状态的…

CSPM考试报名条件是什么?好考吗?

★CSPM是什么&#xff1f; CSPM——项目管理专业人员能力评价&#xff0c;是中国人自己的一套项目管理专业人士的评价指南&#xff0c;符合中国国情且符合中国未来发展的一套项目刊专业人员能力评价的标准。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff…

微信开发工具构建npm and git切换分支

目录 git切换分支NPM构建 git切换分支 案例&#xff1a; 再次查看分支就会发现自己的分支已切换&#xff0c;然后需要重新构建NPM一次 NPM构建 记得安装一下这个&#xff0c;然后在构建 如果未安装NPM&#xff0c;这时候需要打开命令端&#xff0c;安装操作&#xff0c;操作…

ubuntu编写makefile编译c++程序

常见的编译工具 gcc/gvisual cclang 编译一个简单的程序 main.cpp #include <iostream>int main() {std::cout << "hello world" << std::endl;return 0; }gcc 编译 源文件&#xff08;.cpp&#xff09;编译生成目标文件&#xff08;.o&#xf…

GNOME 45 动态三层缓存补丁更新

导读GNOME 45 "Rīga" 上周已正式发布&#xff0c;此版本虽然有许多针对桌面环境的改进&#xff0c;但上游缺少的一个功能是 Canonical 主导的 Mutter 动态三层缓存。 动态三层缓存用于在需要时提升性能&#xff0c;并且已被证明有助于提高桌面渲染性能&#xff0c;…

element-plus el-cascader 级联组件清空所选数据方法

话不多说直接上代码 import {ref, Ref, reactive} from vue; const cascaderOrg:Ref ref<any>(null) //获取级联组件的ref ref名称即cascaderOrg cascaderOrg.value.cascaderPanelRef.clearCheckedNodes(); //清空所选数据借用官方文档展示该方法 相关细节描述及全…

0029__时钟分频原理 - 时钟分频原理详解

时钟分频原理 - 时钟分频原理详解-CSDN博客

写进简历的软件测试项目实战经验(包含电商、银行、app等)

前言&#xff1a; 今天给大家带来几个软件测试项目的实战总结及经验&#xff0c;适合想自学、转行或者面试的朋友&#xff0c;可以写进简历里的那种哦。 1、项目名称: 家电购 项目描述&#xff1a; “家电购”商城系统是基于 web 浏览器的电子商务系统&#xff0c;通过互联…

为什么MyBatis是Java数据库持久层的明智选择

在Java应用程序的开发中&#xff0c;选择合适的数据库持久层框架至关重要。一个明智的选择可以帮助开发人员更好地管理数据库交互、提高性能和简化开发工作。 &#xff08;一&#xff09;为什么要选MyBatis JDBCHibernate / JPAMyBatis简单直接ORM轻量动态SQL关联查询开发效率…

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

batch、batch_size、epoch、iteration关系&#xff1a; epoch&#xff1a;整个数据集 batch&#xff1a; 整个数据集分成多少小块进行训练 batch_size&#xff1a; 一次训练&#xff08;1 batch&#xff09;需要 batch_size个样本 iteration&#xff1a; 整个数据集需要用b…

Bootstrap-- 媒体特性

最大、最小宽度例子&#xff1a; 横屏与竖屏例子&#xff1a; 宽度比与像素比例子&#xff1a;

Xception:使用Tensorflow从头开始实现

一、说明 近年来&#xff0c;卷积神经网络已成为计算机视觉领域的主要算法&#xff0c;开发设计它们的方法一直是相当的关注。Inception模型似乎能够用更少的参数学习更丰富的表示。它们是如何工作的&#xff0c;以及它们与常规卷积有何不同&#xff1f;本文将用tensorflow实现…

【专题】矩形和正方形的最大面积

一.矩形的最大面积——单调栈 &#xff08;1&#xff09;例题 P4147 玉蟾宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) &#xff08;2&#xff09;讲解&#xff08;摘自题解&#xff09; 问题转化&#xff1a; n行m列土地&#xff0c;求最大矩形面积&#xff0c;我们把…

2014款玛莎拉蒂吉博力车驾驶人侧车窗玻璃无法升降

作者&#xff1a;建德宝悦汽车服务中心 方超 方超&#xff0c;从事汽车维修工作12年&#xff0c;现任建德宝悦汽车服务中心技术经理。 故障现象 一辆2014款玛莎拉蒂吉博力车&#xff0c;搭载3.0T发动机&#xff0c;累计行驶里程约为7.4万km。车主进店反映&#xff0c;驾驶人侧…

论文学习记录--零样本学习(zero-shot learning)

Socher R, Ganjoo M, Manning C D, et al. Zero-shot learning through cross-modal transfer[J]. Advances in neural information processing systems, 2013, 26. 注&#xff1a;中文为机翻 zero-shot learning&#xff1a;通过学习类别之间的关系和属性&#xff0c;使得模型…

JUC并发编程:Monitor和对象结构

JUC并发编程&#xff1a;Monitor和对象结构 1. Monitor1.1 对象的结构1.1.1 MarkWord1.1.2 Klass Word1.1.3 数组长度1.1.4 &#x1f330; 1. Monitor Monitor官方文档 我们可以把Monitor理解为一个同步工具&#xff0c;也可以认为是一种同步机制。它通常被描述为一个对象&…

【广州华锐互动】钢厂铸锻部VR沉浸式实训系统

随着科技的不断进步&#xff0c;虚拟现实(VR)技术已成为当今最具潜力的技术之一。在钢铁行业中&#xff0c;VR虚拟仿真实训已经被广泛应用于培训和教育领域&#xff0c;特别是钢铁厂铸锻部&#xff0c;通过VR技术&#xff0c;可以大大提高培训效率&#xff0c;降低培训成本&…

浅谈IT 运维-变更管理

定义&#xff1a; 在企业的运维管理过程中&#xff0c;很多时候会有变更产生。这些变更通常来源于基础设施的升级&#xff0c;容量管理、可用性管理、软件更新、新服务的推出&#xff0c;服务级别目标的变化等等。 风险与问题举例&#xff1a; 变更在执行中常 常会引发以下一…

iMovie for Mac:专业级的视频剪辑体验!

如果你是一位视频爱好者&#xff0c;那么你一定不能错过iMovie for Mac这款专业视频剪辑工具。它不仅拥有简单易用的界面&#xff0c;而且功能强大&#xff0c;可以让你轻松完成复杂的视频剪辑任务。 一、界面友好&#xff0c;上手容易 iMovie for Mac的界面设计简洁明了&…

NoSQL之 Redis命令工具及常用命令

目录 1 Redis 命令工具 1.1 redis-cli 命令行工具 1.2 redis-benchmark 测试工具 2 Redis 数据库常用命令 2.1 set&#xff1a;存放数据&#xff0c;命令格式为 set key value 2.2 get&#xff1a;获取数据&#xff0c;命令格式为 get key 2.3 keys 命令可以取符合规则的…