矩阵最大值
题目描述
给定一个仅包含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。 |
源码和解析
解析:
对每行的数据进行n次右移,就可以得到最大的可能。求出每行的最大值即可文章来源:https://www.toymoban.com/news/detail-664838.html
示例代码:文章来源地址https://www.toymoban.com/news/detail-664838.html
public class T8 {
public static void main(String[] args) {
int number = 5;
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 } };
// number = 3;
// int[][] numArr ={{1,0,1},{0,1,0},{0,0,1}};
int sum = 0;// 最后的和
for (int[] arr : numArr) {
int[] tmpArr = arr;
int max = 0;
for (int i = 0; i < arr.length; i++) {
tmpArr = toRight(tmpArr, number);
String binStr = "";
for (int j = 0; j < tmpArr.length; j++) {
// System.out.print(tmpArr[j] + ",");
binStr += tmpArr[j];
}
int num = Integer.parseUnsignedInt(binStr, 2);
if (max < num) {
max = num;
}
System.out.println("单行最值:" + max);
}
sum += max;// 每行的最大值相加
System.out.println("_________");
}
System.out.println("矩阵的最大值为:" + sum);
}
public static int[] toRight(int[] arr, int n) {
// 右移一位
int tempArr[] = arr.clone();
for (int i = 1; i < arr.length - 1; i++) {
tempArr[i] = arr[i - 1];
}
tempArr[0] = arr[arr.length - 1];
tempArr[arr.length - 1] = arr[arr.length - 2];
return tempArr;
}
}
到了这里,关于华为OD机试之矩阵最大值(Java源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!