Java 对于给定的行和列和,检查二进制矩阵是否只存在2行
我有一个只有2行N列的二进制矩阵 第一行的元素和为A,第二行的元素和为B 列的总和存储在数组C中Java 对于给定的行和列和,检查二进制矩阵是否只存在2行,java,matrix,Java,Matrix,我有一个只有2行N列的二进制矩阵 第一行的元素和为A,第二行的元素和为B 列的总和存储在数组C中 If A = 3, B = 2, C = [2,1,1,0,1] Then output is "11001,10100" Explanation: 11001 = sum of 1st row is A = 3 10100 = sum of 2nd row is B = 2 21101 --> This is column sum which indicates Array C. 另一
If A = 3, B = 2, C = [2,1,1,0,1] Then output is "11001,10100"
Explanation:
11001 = sum of 1st row is A = 3
10100 = sum of 2nd row is B = 2
21101 --> This is column sum which indicates Array C.
另一个例子:
If A = 2, B = 3, C = [0,0,1,1,2] Then output is "NO"
我写了下面的程序,用于上面的测试用例,但是当我在面试中运行这个程序时,它只通过了40%的测试用例,你能帮我解决这个问题吗?这个程序中的错误是什么?如何纠正
public static String process(int A, int B, int[] C) {
int total = 0;
for (int val : C) {
total = total + val;
}
// Sums do not match so matrix is not possble
if (total != A + B) {
return "NO";
} else {
String first = "", second = "";
boolean flag = true;
for (int i = 0; i < C.length; i++) {
// Both the columns must be 1
if (C[i] == 2) {
first += "1";
second += "1";
} else if (C[i] == 0) {
// Both the columns must be 0
first += "0";
second += "0";
} else {
// Any one if the columns should be 1
if (flag) {
first += "1";
second += "0";
} else {
first += "0";
second += "1";
}
flag = !flag;
}
}
return first + "," + second;
}
}
公共静态字符串进程(int A、int B、int[]C){
int-total=0;
for(int val:C){
总计=总计+val;
}
//和不匹配,所以矩阵不可能
如果(总计!=A+B){
返回“否”;
}否则{
字符串first=“”,second=“”;
布尔标志=真;
for(int i=0;i
差不多了,但问题出在这里:
// Any one if the columns should be 1
仅考虑这一点意味着您的两个矩阵将满足C
提供的条件,但不满足A
和B
,因为您只是交替使用C[i]==1
这种中断的最简单情况是:A=2
、B=0
和C=[1,1]
。您的程序将打印“10,01”
,而它应该是“11,00”
所以这里的技巧是:在处理简单的C[i]==0
和C[i]==2
情况后,您必须计算出第一行和第二行中还有多少1
s
编辑:可能的解决方案是:
boolean flag = true;
int currentTopRowSum = 0;
for (int i = 0; i < C.length; i++) {
// Both the columns must be 1
if (C[i] == 2) {
first += "1";
second += "1";
} else if (C[i] == 0) {
// Both the columns must be 0
first += "0";
second += "0";
} else {
//This is where it went wrong, so I changed this.
if (currentTopRowSum < A) {
first += "1";
second += "0";
currentTopRowSum++;
} else {
first += "0";
second += "1";
}
}
}
boolean标志=true;
int currentTopRowSum=0;
for(int i=0;i
简言之,如果您还没有达到标准,您可以跟踪最上面一行的总和,并将
“1”
添加到该行中。如果有,请将其添加到最下面一行。您能帮助我如何编写此逻辑以查找所有可能的集合吗?当然,请检查我的答案。它并没有提供所有可能的解决方案,但在给定约束条件À、
B和
C`的情况下,它将提供正确的解决方案。