java求取矩阵最大值

java求取矩阵最大值


描述

给定一个仅包含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行为二维矩阵信息,行内元素边角逗号分隔。

输入 :
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。

实现(开箱即用)

package com.des.data.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MaximumValueMatrix {

    public static void main(String[] args) {
        int[][] numArr = {{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}};
        String str2 = "110";
        System.out.println(sumMax(numArr));
    }

    public static int sumMax(int[][] numArr) {
        int sum = 0;
        for (int[] arr : numArr) {
            sum += max(arr);
        }
        return sum;
    }

    private static int max(int[] arr) {
        List<Integer> incs = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            StringBuffer strb = new StringBuffer();
            for (int j = i; j < arr.length; j++) {
                strb.append(arr[j]);
            }
            for (int j = 0; j < i; j++) {
                strb.append(arr[j]);
            }
            incs.add(Integer.parseInt(strb.toString(), 2));
            strb = new StringBuffer();
        }
        return Collections.max(incs);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值