我目前有以下代碼:緊湊的方式,如果數組包含特定元素
int[][] legalForBlack = {{0,1},{1,0},{2,3},{3,2}};
for (int x=0;x<boardSize;x++) {
for (int y=0;y<boardSize;y++) {
if (x,y) in legalForBlack
methodA()
else
methodB()
}
}
當然,這代碼不能編譯。我正在尋找一種花哨而緊湊的方式來檢查(x,y)何時位於給定列表中。 我可以用4個if語句或一個循環來做到這一點,但這不是一種正確的方法。 我正在尋找在恆定時間內完成此操作的內容。
編輯:
我想我找到了一種方法。你覺得這怎麼樣?
int[][] legalForBlack = {{0,1},{1,0},{2,3},{3,2}}; // keep in order!
int cur = 0;
for (int x=0;x<boardSize;x++) {
for (int y=0;y<boardSize;y++) {
int[] buffer = legalForBlack[cur];
if (x==buffer[0] && y==buffer[1]) {
cur++;
methodA();
} else {
methodB();
}
}
}
確實。但是這將需要Set.contains(...)本身內的一個循環。 我在不斷的思考着什麼。 我添加了一段需要時間不變的新代碼。 – Domien
Set包含O(1)中的作品,所以沒有循環。只有循環用於插入,但如果未對數據進行硬編碼,則在將數據放入數組時,您已經這樣做了。 –
啊我一定忽視了複雜性。你是對的。 – Domien