2 回答

TA貢獻1802條經驗 獲得超5個贊
你搞砸了循環的順序:你應該先迭代arr。這個想法是 ti 使用 flags: isSubset,當在一行中找不到某個元素時,它變為 false,contains如果當前檢查的元素在一行中,則變為 true。
可以進行一些改進(如 foreach 循環和標記中斷),但我決定保持代碼簡單。
public class GFG {
public static void main(String args[]) {
int arr[][] = { { 11, 1, 13, 3, 7 },
{ 11, 1, 17, 7, 3 },
{ 2, 5, 8, 9, 10 } };
int test[] = { 11, 3, 7, 1 };
for (int i = 0; i < arr.length; i++) {
boolean isSubset = true;
for (int j = 0; j < test.length; j++) {
boolean contains = false;
for (int k = 0; k < arr[i].length; k++) {
if (test[j] == arr[i][k]) {
contains = true;
break;
}
}
if (!contains) {
isSubset = false;
break;
}
}
if (isSubset) {
System.out.println("test[] is " + "subset of arr " + i + " row");
} else {
System.out.println("test[] is " + "not a subset of arr " + i + " row");
}
}
}
}

TA貢獻1876條經驗 獲得超5個贊
嘗試將您的解決方案分解為更小的方法,這樣您的代碼會更清晰,您可以更容易地想到發生了什么。這是一個如何完成的示例:
class GFG {
public static void main(String args[]) {
int arr1[][] = { { 11, 1, 13, 3, 7 },
{ 11, 1, 17, 7, 3 },
{ 2, 5, 8, 9, 10 } };
int test[] = { 11, 3, 7, 1 };
System.out.println(arr1[0].length); // just for testing if it works
for (int i = 0; i < arr1.length; i++) {
if (isSubset(test, arr1[i])) {
System.out.println("test[] is " + "subset of arr1 " + i + " row");
} else {
System.out.println("test[] is " + "not a subset of arr1 " + i + " row");
}
}
}
/* returns true if arr contains all elements of sub */
static boolean isSubset(int[] sub, int[] arr) {
for (int e : sub) {
if (!contains(e, arr)) return false;
}
return true;
}
/* returns true if arr contains elem */
static boolean contains(int elem, int[] arr) {
for (int e : arr) {
if (elem == e) return true;
}
return false;
}
}
添加回答
舉報