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

每日一道算法题 8(2023-12-16)

题目描述
给定一个仅包含0和1的n*n二维矩阵
请计算二维矩阵的最大值
计算规则如下

每行元素按下标顺序组成一个二进制数(下标越大约排在低位),
二进制数的值就是该行的值,矩阵各行之和为矩阵的值

允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置
比如
[1,0,1,1,1]向右整体循环移动两位[1,1,1,0,1]
二进制数为11101值为29
[1,0,1,1,1]向左整体循环移动两位[1,1,1,1,0]
二进制数为11110值为30
输入描述
数据的第一行为正整数,记录了N的大小,0 < N <= 20
输入的第2到n+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 
说明

第一行向右整体循环移动一位(11000),得到最大值  24
第二行向右整体循环移动两位(11000),得到最大值  24
第三行向右整体循环移动一位(10100),得到最大值  20
第四行向右整体循环移动两位(11100),得到最大值  28
第五行向右整体循环移动一位(11010),得到最大值  26

因此最大122 

package com.tarena.test.B10;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * @author Administrator
 *
 */
public class B18 {

    public static void main(String[] args) {
        try(Scanner sc = new Scanner(System.in)){
            int lineNum = Integer.parseInt(sc.nextLine());
            List<String> list = new LinkedList<>();
            for(int i=0;i<lineNum;i++) {
                list.add(sc.nextLine());
            }
            System.out.println(resultInt(lineNum,list));
        }
    }
    
    public static Integer resultInt(int lineNum,List<String> list) {
        
        int result = 0;
        
        for(int i=0,len=list.size();i<len;i++) {
            LinkedList<Integer> intList = Arrays.stream(list.get(i).split(","))
                    .map(Integer::parseInt)
                    .collect(Collectors.toCollection(LinkedList::new));
            int max = getVal(intList);
            for(int j=0,len2=intList.size();j<len2;j++) {
                intList.addFirst(intList.removeLast());
                max = Math.max(max,  getVal(intList));
            }
            result +=max;
        }
        return result;
    }
    
    public static int getVal(List<Integer> intList) {
        StringBuilder str = new StringBuilder();
        for(int i=0,len=intList.size();i<len;i++) {
            str.append(intList.get(i));
        }
        return Integer.parseInt(str.toString(), 2);
    }
    
}
了解知识点

1 Integer 类内parseInt 方法的使用

2 Math 类的使用

3 LinkedList add,addFirst,remove,removeLast 等方法的区别

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

相关文章:

  • Unity项目优化案例二
  • 如何发布自定义 npm 组件包
  • iOS_给View的部分区域截图 snapshot for view
  • 计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
  • IDEA debug窗口左边工具栏隐藏与显示
  • WPF 基于TableControl的页面切换
  • Lua 元表,元方法
  • C# WPF上位机开发(利用tcp/ip网络访问plc)
  • Knife4j 接口文档如何设置 Authorization 鉴权参数?
  • CentOS 防火墙管理及使用的redis基本常用命令
  • 路由器原理
  • 采埃孚4D成像雷达拆解
  • 若依框架springboot——修改前端图片上传样式
  • mysql 数据库 关于库的基本操作
  • 【通用】Linux,VSCode,IDEA,Eclipse等资源相对位置
  • 音视频技术开发周刊 | 323
  • STM32在CTF中的应用和快速解题
  • SaaS 电商设计 (五) 私有化部署-实现 binlog 中间件适配
  • Android APP 常见概念与 adb 命令
  • 菜鸟学习日记(python)——函数
  • 垃圾回收 (GC) 在 .NET Core 中是如何工作的?
  • Appium 图像识别技术 OpenCV
  • 产品Axure的元组件以及案例
  • 智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • flutter Pageview组件
  • 如何用 Cargo 管理 Rust 工程系列 丙
  • Vue学习笔记-Vue3中的provide与inject
  • 2021年数维杯国际大学生数学建模A题新冠肺炎背景下港口资源优化配置策略求解全过程文档及程序
  • 【css】css实现文字两端对齐效果:
  • ElasticSearch指南 - Mapping - Metadata fields