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

华为OD机考算法题:矩阵最大值

题目部分

题目矩阵最大值
难度
题目说明给定一个仅包含 0 和 1 的 N*N 二维矩阵,请计算二维矩阵的最大值,计算规则如下:
1. 每行元素按下标顺序组成一个二进制数(下标越大越排在低位),二进制数的值就是该行的值。矩阵各行值之和为矩阵的值。
2. 允许通过向左或向右整体循环移动每行元素来改变各元素在行中的位置。
比如: [1,0,1,1,1] 向右整体循环移动 2 位变为 [1,1,1,0,1],二进制数为 11101,值为 29。
[1,0,1,1,1] 向左整体循环移动 2 位变为 [1,1,1,1,0],二进制数为 11110,值为 30。
输入描述1. 输入的第一行为正整数,记录了 N 的大小,0 < N <= 20。
2. 输入的第 2 到 N+1 行为二维矩阵信息,行内元素边角逗号分隔。
输出描述矩阵各行之和的最大值。
补充说明
------------------------------------------------------
示例
示例1
输入5
1,0,0,0,1
0,0,0,1,1
0,1,0,1,0
1,0,0,1,1
1,0,1,0,1
输出122
说明第一行向右整体循环移动 1 位,得到本行的最大值 [1,1,0,0,0],二进制值为 11000,十进制值为 24。
第二行向右整体循环移动 2 位,得到本行的最大值 [1,1,0,0,0],二进制值为 11000,十进制值为 24。
第三行向左整体循环移动 1 位,得到本行的最大值 [1,0,1,0,0],二进制值为 10100,十进制值为 20。
第四行向右整体循环移动 2 位,得到本行的最大值 [1,1,1,0,0],二进制值为 11100,十进制值为 28。
第五行向右整体循环移动 1 位,得到本行的最大值 [1,1,0,1,0],二进制值为 11010,十进制值为 26。
因此,矩阵的最大值为 122。


解读与分析

题目解读

矩阵的每一行为一个二进制数字,通过左右移动,得到最大的二进制数。输出所有最大二进制数之和。

分析与思路

1. 解析输入矩阵的每一行,并转换成对应的 10 进制数字;
2. 每一行的二进制数字每向右移动一位,相当于把这个数字(第一步中解析的数字,设为 value) 除以 2(取整),设为 valuePart1;然后再把 value % 2 的值(设为 modValue),乘以 2^{N-1},设为 valuePart2,计算 valuePart1 与 valuePart2 之和即为向右移动一位之后的结果。
3. 在第 2 步获取的数字的基础上,继续右移。对于一个 N 位的二进制,向右移动 N 位之后就会回到初始值。因而,移动 (N -1) 次求出这 N 个数中的最大值即可。

4. 然后对每一行的最大值求和,并输出。

时间复杂度为 O(n^{2}),空间复杂度为 O(n)。


代码实现

Java代码

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;/*** 支持优先级的队列* * @since 2023.10.26* @version 0.1* @author Frank**/
public class MatrixMaxValue {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();int count = Integer.parseInt( input );int maxValue = 0;for( int i = 0; i < count; i ++ ){input = sc.nextLine();maxValue += getMaxValueEachLine( count, input );}System.out.println( maxValue );}}private static int getMaxValueEachLine( int count, String input ){int sourceValue = parseStringValue( input );int maxValue = sourceValue;int curValue = sourceValue;// 右移 n - 1 次,求最大值for( int i = 0; i < count - 1; i ++ ){	   int partValue1 = curValue / 2;int partValue2 = (int) Math.round ( ( curValue % 2 ) * Math.pow( 2 , count - 1) );  // 使用round避免误差,不会越界curValue = partValue1 + partValue2;if( curValue > maxValue ){maxValue = curValue;}}return maxValue;}private static int parseStringValue( String input ){int ret = 0;String[] binaryArr = input.split( "," );for( int i = 0; i < binaryArr.length; i ++ ){ret *= 2;ret += Integer.parseInt( binaryArr[i] );}return ret;}
}

在以上 Java 代码中,Math.pow() 函数返回的是浮点数,为了避免浮点数计算时出现误差(大概率应该不会出现误差),为了保证程序的正确性,最后使用了 Math.round() 函数。
Math.round() 返回 long 型数字,为了避免数据类型不匹配,使用强制数据类型转换。因为 N 的最大值是 20,最大值 2^{20} - 1,比 10^{6} 稍大,此时不会越界。

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {var count = parseInt( line );var maxValue = 0;for (var i = 0; i < count; i++) {line = await readline()maxValue += getMaxValueEachLine(count, line );}console.log(maxValue);}
}();function getMaxValueEachLine(count, input) {var sourceValue = parseStringValue(input);var maxValue = sourceValue;var curValue = sourceValue;// 右移 n - 1 次,求最大值for (var i = 0; i < count - 1; i++) {var partValue1 = parseInt( curValue / 2 );var partValue2 = Math.round((curValue % 2) * Math.pow(2, count - 1)); // 使用round,避免误差,不会越界curValue = partValue1 + partValue2;if (curValue > maxValue) {maxValue = curValue;}}return maxValue;
}function parseStringValue(input) {var ret = 0;var binaryArr = input.split(",");for (var i = 0; i < binaryArr.length; i++) {ret *= 2;ret += parseInt(binaryArr[i]);}return ret;
}

(完)

相关文章:

华为OD机考算法题:矩阵最大值

题目部分 题目矩阵最大值难度难题目说明给定一个仅包含 0 和 1 的 N*N 二维矩阵&#xff0c;请计算二维矩阵的最大值&#xff0c;计算规则如下&#xff1a; 1. 每行元素按下标顺序组成一个二进制数&#xff08;下标越大越排在低位&#xff09;&#xff0c;二进制数的值就是该行…...

【Javascript】函数之形参与实参

function c(a,b){return ab;}var sumc(3,4);console.log(sum);a,b为形参 3,4为实参 形参和实参是⼀⼀对应的数量可以不对应参数的类型不确定函数可以设置默认参数实参可以是字⾯量也可以是变量...

PAT 乙级1090危险品装箱

题目&#xff1a; 集装箱运输货物时&#xff0c;我们必须特别小心&#xff0c;不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱&#xff0c;否则很容易造成爆炸。 本题给定一张不相容物品的清单&#xff0c;需要你检查每一张集装箱货品清单&#xff0c;…...

Response Header中不暴露Server(IIS)版本、ASP.NET及相关版本等信息

ASP MVC开发的Web默认情况下会在请求的回应中暴露Server、X-AspNet-Version、X-AspNetMvc-Version、X-Powered-By等相关服务端信息&#xff0c;公开这些敏感信息会存在一定的安全风险。 X-SourceFiles标头用于被IIS / IIS Express中某些调试模块理解&#xff0c;它包含到磁盘上…...

测试C#调用Vlc.DotNet组件播放视频

除了Windows Media Player组件&#xff0c;在百度上搜索到还有不少文章介绍采用Vlc.DotNet组件播放视频&#xff0c;关于Vlc.DotNet的详细介绍见参考文献1&#xff0c;本文学习Vlc.DotNet的基本用法。   VS2022中新建基于.net core的winform程序&#xff0c;在Nuget包管理器中…...

JS的事件委托(Event Delegation)

✨ 事件委托&#xff08;Event Delegation&#xff09;及其优势和缺点 &#x1f383; 什么是事件委托 事件委托是一种在JavaScript中处理事件的技术。它利用了事件的冒泡机制&#xff0c;将事件处理程序绑定到它们的共同祖先元素上&#xff0c;而不是直接绑定到每个子元素上。…...

selenium+python自动化安装驱动 碰到的问题

刚开始使用谷歌驱动&#xff0c;我的谷歌浏览器版本是最新版下载驱动地址&#xff0c;访问不了。 Chrome for Testing availability只能使用火狐驱动&#xff0c;我这里的火狐版本也是最新版119.0 查找全网找到驱动geckodriver下载地址 https://mirrors.huaweicloud.com/ge…...

laravel+vue2 element 一套项目级医院手术麻醉信息系统源码

手术麻醉临床信息系统源码&#xff0c;PHPmysqllaravelvue2 手术麻醉临床信息系统&#xff0c;采用计算机和通信技术&#xff0c;实现监护仪、麻醉机、输液泵等设备输出数据的自动采集&#xff0c;采集的数据能够如实准确地反映患者生命体征参数的变化&#xff0c;并实现信息高…...

GEE——使用MODIS GPP和LAI数据进行一元线性回归计算和R2分析

使用两种方法计算一元线性回归,一种使用GEE本身自带的函数,另一种使用自己编写代码的方式进行,对比两者结果的差异。 简介 一元线性趋势分析是指利用一元线性回归模型来分析一组数据的趋势性。在一元线性回归模型中,我们假设自变量(x)和因变量(y)之间存在一定的线性关…...

[论文阅读]Point Density-Aware Voxels for LiDAR 3D Object Detection(PDV)

PDV Point Density-Aware Voxels for LiDAR 3D Object Detection 论文网址&#xff1a;PDV 论文代码&#xff1a;PDV 简读论文 摘要 LiDAR 已成为自动驾驶中主要的 3D 目标检测传感器之一。然而&#xff0c;激光雷达的发散点模式随着距离的增加而导致采样点云不均匀&#x…...

自动化学报格式 Overleaf 在线使用 【2023最新教程】

自动化学报格式 Overleaf 在线使用 摘要 2023年10月26日19:28:17&#xff08;云南昆明&#xff09; 今天课程老师要我们期末提交一篇论文&#xff0c;以自动化学报格式提交。因此&#xff0c;去官网发现只有 latex 格式&#xff0c;下载下来发现各种格式不兼容&#xff1b;由于…...

掌握CSS动画技巧:打造引人注目的页面过渡效果!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一…...

薛定谔的猫重出江湖?法国初创公司AliceBob研发猫态量子比特

总部位于巴黎的初创公司Alice&Bob使用超导芯片的两个相反的量子态&#xff08;他们称之为“猫态量子比特”芯片&#xff09;来帮助开发量子计算的不同自旋方式。&#xff08;图片来源&#xff1a;网络&#xff09; 有的人认为&#xff0c;构建量子计算机的模块模仿了著名的…...

18亿欧元大动作,法国瞄准实现量子飞跃

Quobly 正在开发一种容错量子处理器&#xff08;图片来源&#xff1a;网络&#xff09; 2021年1月&#xff0c;马克龙总统宣布了法国国家量子计算计划&#xff0c;并将为该技术投入高达18亿欧元。 “量子战略至关重要&#xff0c;”马克龙在量子研究中心巴黎萨克雷大学宣布该…...

写保护设置——三、I2C EEPROM

三、I2C EEPROM I2C通讯的EEPROM只有硬保护&#xff0c;没有软保护。 以AT24C01A/02/04/16型EEPROM和AT24C02A/04A/08A/16A型EEPROM为例&#xff0c;管脚定义和写保护WP功能分别如下。 &#xff08;1&#xff09;AT24C01A/02/04/16型EEPROM 规格书&#xff1a; AT24C01A/02…...

【嵌入式】HC32F07X ADC采样及软件滤波

目录 一 背景说明 二 原理分析 三 电压采样 四 软件滤波 一 背景说明 使用小华&#xff08;华大&#xff09;的MCU HC32F07X实现四个通道的 0-5V 电压采样&#xff0c;并对采样结果进行滤波处理。 二 原理分析 【1】ADC原理说明&#xff1a; 单片机是数字芯片&#xff0c;…...

VSCode snippets

生成工具&#xff1a;https://snippet-generator.app/ VSCode snippets&#xff1a;https://code.visualstudio.com/docs/editor/userdefinedsnippets#/ VS Code 中的 Snippets 是一种快捷方式&#xff0c;可以帮助你更快地编写代码。你可以创建自己的 Snippets&#xff0c;也…...

openEuler 22.03 LTS 环境使用 Docker Compose 一键部署 JumpServer (all-in-one 模式)

环境回顾 上一篇文章中&#xff0c;我们讲解了 openEuler 22.03 LTS 安装 Docker CE 和 Dcoker Compose&#xff0c;部署的软件环境版本分别如下&#xff1a; OS 系统&#xff1a;openEuler 22.03 LTS(openEuler-22.03-LTS-x86_64-dvd.iso)Docker Engine&#xff1a;Docker C…...

宏电5G RedCap工业智能网关获首个中国移动5G物联网开放实验室5G及轻量化产品能力认证

10月21日&#xff0c;2023世界物联网博览会——中国移动物联网开发者大会暨物联网产业论坛在无锡圆满举行。宏电股份参与中国移动5G物联网开放实验室5G及轻量化产品能力认证成果授牌仪式&#xff0c;并获得认证证书。 此次认证主要对产品功能、产品性能、RedCap网络兼容性进行测…...

MySQL查询今日、昨日、最近七天的数据

查询今日数据 sql语句&#xff1a; SELECT * FROM short_oper_log WHERE to_days(login_time) to_days(now());运行结果&#xff1a; 查询昨日数据 sql语句&#xff1a; SELECT * FROM short_oper_log WHERE DATEDIFF(login_time,NOW()) -1;运行结果&#xff1a; 额外…...

《Moltbot 终极实操手册:从自托管架构到生产级 AI Agent》

《Moltbot 终极实操手册:从自托管架构到生产级 AI Agent》 第一部分:定义与架构篇 —— 深度理解 Moltbot 第 1 章:AI 助手的新形态:Moltbot 概览 1.1 什么是 Moltbot?(从核心定义到原名 Clawdbot 的演变) 1.2 核心愿景:打破 AI 沙箱,实现系统级控制与隐私自主。 1.…...

代码分享】“基因集单通路的泛癌GSEA富集分析

【代码分享]基因集单通路的泛癌GSEA富集分析#资料 如图最近在整理TCGA多组学数据时&#xff0c;发现不少小伙伴对通路活性评估有需求。今天分享一个快速实现泛癌GSEA分析的方法&#xff0c;特别适合需要观察某个特定通路在多个癌症类型中激活状态的情况。这个方法不需要复杂的编…...

基于Matlab的多自由度轴承静刚度计算之旅

基于Matlab的多自由度轴承静刚度计算 因分析静态下刚度结果&#xff0c;仅考虑重力作用&#xff0c;未考虑离心力的作用 深沟球轴承和圆锥轴承基本参数包括滚珠数量、滚珠直径、中称直径、曲率和材料参数 程序已调通&#xff0c;可直接运行在机械工程领域&#xff0c;深入了解轴…...

UNIX设计哲学:一切皆文件的原理与应用

1. UNIX 设计哲学的核心&#xff1a;"一切皆文件"在计算机操作系统的演进历程中&#xff0c;UNIX系统以其简洁而强大的设计哲学独树一帜。作为一名长期与UNIX/Linux系统打交道的开发者&#xff0c;我深刻体会到"一切皆文件"这一理念对整个计算机领域产生的…...

从“能用”到“好用”:给你的GoLand 2022.2.3装上这些插件,开发体验大不同

从“能用”到“好用”&#xff1a;给你的GoLand 2022.2.3装上这些插件&#xff0c;开发体验大不同 每天面对代码编辑器的时间可能比面对家人还长——这不是玩笑&#xff0c;而是许多开发者的真实写照。当GoLand从单纯的代码工具转变为你的"数字工作台"&#xff0c;插…...

工程实践100道 · 第一篇:模型上线与部署25道

工程实践100道 第一篇&#xff1a;模型上线与部署25道本篇覆盖机器学习模型从训练到上线的全流程&#xff0c;详解模型部署、在线服务、效果监控等面试常考点。1. 模型上线的基本流程是什么&#xff1f; 白话答案&#xff1a; 模型上线流程&#xff1a; 模型训练&#xff1a;离…...

云端开发新选择:星图OpenClaw镜像+千问3.5-9B联调

云端开发新选择&#xff1a;星图OpenClaw镜像千问3.5-9B联调 1. 为什么选择云端联调方案&#xff1f; 去年尝试在MacBook Pro上本地部署OpenClaw时&#xff0c;风扇狂转的噪音让我意识到一个问题&#xff1a;个人设备跑大模型自动化框架的组合实在太吃资源。当时为了调试一个…...

解决Python文件路径超长问题:Windows系统下的终极指南

解决Python文件路径超长问题&#xff1a;Windows系统下的终极指南 在Windows平台上开发Python应用时&#xff0c;文件路径长度限制是个令人头疼的"历史遗留问题"。记得第一次接手一个大型Python项目时&#xff0c;我花了整整两天时间才搞明白为什么某些文件总是无法读…...

ADC0809模数转换实战:如何用51单片机+LCD1602搭建简易电压表(附完整代码)

51单片机与ADC0809模数转换实战&#xff1a;打造高精度LCD电压表 1. 项目背景与核心器件解析 在电子测量领域&#xff0c;电压表是最基础也最常用的工具之一。传统指针式电压表虽然直观&#xff0c;但精度和功能扩展性有限。而基于51单片机与ADC0809的数字电压表&#xff0c;不…...

终极TensorFlow Rust数学运算指南:从基础算术到复杂函数完全掌握

终极TensorFlow Rust数学运算指南&#xff1a;从基础算术到复杂函数完全掌握 【免费下载链接】rust Rust language bindings for TensorFlow 项目地址: https://gitcode.com/gh_mirrors/rust/rust TensorFlow Rust为开发者提供了强大的数学运算能力&#xff0c;通过Rust…...