一.題目 :對於乙個給定的井字棋棋盤,請設計乙個高效演算法判斷當前玩家是否獲勝。
給定乙個二維陣列board,代表當前棋盤,其中元素為1的代表是當前玩家的棋子,為0表示沒有棋子,為-1代表是對方玩家的棋子。
測試樣例:[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
思路:對於井字棋的獲勝方式,有下面幾種:
1.一行全為1
2.一列全為1
3.斜角全為1
有獲勝的方法就很好寫**了。
**:
bool checkwon
(vectorint>
> board)
for(
int i=
0;i<
2;i++)if
(board[0]
[0]+board[1]
[1]+board[2]
[2]==
3)return true;
if(board[0]
[2]+board[1]
[1]+board[2]
[0]==
3)return true;
return false;
}
解題思路:如果從前往後遍歷字串,遇到空格,就需要把%20插入進去,而%20是三個字元,插進去就要後面的字元全部移動,而如果空格一多,移動的頻率就會更多,這樣顯然不是最好的辦法。
觀察後發現乙個空格替換會讓原來的字串的長度加2,那麼如果定義原字串的長度為n,那麼替換之後的字串為n+2*空格數。那麼就我們定義兩個指標,乙個指向原字串末尾,乙個指向替換字串末尾,然後讓指向原字串末尾的指標向前移動,如果不是空格,就把此時的值賦給替換後的字串。如果是空格,就讓替換字串的指標向前移動三次,分別賦予%20,直到結束。這樣做的好處是每乙個字元都只會被移動一次,效率大大提高。
**:
string replacespace
(string s)
int oldpoint =0;
int newpoint =0;
while
(s[oldpoint]
!='\0'
) oldpoint++
; newpoint = oldpoint +
2* count;
while
(newpoint>oldpoint&&oldpoint>=0)
else
}return s;
}
網路程式設計part2
五層協議 計算機1 計算機2 應用層 應用層 socket socket 傳輸層 段傳輸層 網路層包 網路層資料鏈路層 幀資料鏈路層 物理層 互動機 物理層 客戶端軟體send 服務端軟體recv 作業系統 作業系統 計算機硬體 物理介質 計算機硬體 客戶端軟體send 服務端軟體recv 作業系統...
Mosh Python教程練習題 Part 2
7 字串索引列印。course python for beginners 根據變數名 索引 列印字串 列印索引為2的字串 print course 2 列印從索引x到y的字串 y不會被列印,只列印到y 1 print course 1 4 列印最後乙個字元 print course 1 複製字串 a...
C 記憶體管理 part2
allocating class instances using new new operator 也可以用於對class instance分配動態記憶體。如下例 include using namespace std class point private int x int y int main...