Leetcode 第136場周賽解題報告

2022-07-14 12:39:28 字數 2601 閱讀 9703

週日的比賽的時候正在外面辦事,沒有參加。賽後看了下題目,幾道題除了表面要考的內容,還是有些能發散擴充套件的地方。

做題目不是最終目的,通過做題發現知識盲區,去研究學習,才能不斷提高。

理論和實際是有關係的,一些題目也都有現實意義。計算機的一些模擬操作,通過數學演算法,能夠大大減輕**量和演算法複雜度。

第一題是機械人在座標系上直走和轉彎,通過簡單的模擬就能實現。但是仔細思考發現還能通過線性代數,座標變換的方式做,這樣在實際中計算更快。甚至還可以用複數來做。

實際掃地機械人可能就用到了類似的演算法。讓他能夠不至於始終原地打轉。

第四題是典型的字尾樹、字尾陣列應用,找字串最長重複子串。在搜尋引擎,或dna檢測中,都是有實際使用場景的。在70年代就已經有應用了,是乙個很經典的演算法。而且在90年代至今,一直有科學家提公升建立字尾樹和字尾陣列的時間複雜度。這個演算法也是在不斷發展的。而且在2023年中國的李志澤,李建和霍紅衛三位科學家提出了線性時間複雜度,常數空間的最優構造演算法。是中國人對演算法的貢獻。

下面是詳細的題解和思考。

比賽的位址 weekly contest 136

題目:

困於環中的機械人(robot bounded in circle)

/problems/robot-bounded-in-circle/

題意:

在無限的平面上,機械人最初位於 (0, 0) 處,面朝北方。機械人可以接受下列三條指令之一:

"g":直走 1 個單位

"l":左轉 90 度

"r":右轉 90 度

機械人按順序執行指令 instructions,並一直重複它們。

只有在平面中存在環使得機械人永遠無法離開時,返回 true。否則,返回 false。

思路:

假設機械人重複走n次指令後,面朝北:

此時如果座標在原點,則n次迴圈後就會重複從前的路徑。

如果座標不在原點,此時把當前位置當作原點,就會每n次移動遠離一段和當前原點的距離。距離最初的(0,0)位置越來越遠。就不存在迴圈會最原始原點的問題。

其實至多經過四次,機械人就會面朝北。

經過一次指令後,機械人面朝西或東,相當於逆時針或順時針轉了90度,則再經過三次,就面朝北了。

經過一次指令後,朝南則轉了180度,共移動兩次指令後朝北。

數學方法:

還可以把指令集先計算一遍,得出經過乙個指令集後的相對移動位置和方向轉角。用矩陣計算,就不用每次都執行一大堆指令模擬,加快運算速度;

還可以用複數來運算,複數對於轉90度有簡單的運算方法。

class solution ,,,};

doelse if(ch=='r')

else

}

}while(i!=0);

if(x==0&&y==0)

return true;

return false;

}};

題目:

不鄰接植花(flower planting with no adjacent)

/problems/flower-planting-with-no-adjacent/

題意:

在乙個無向圖中,每個點的出度都不超過3。有四種顏色,給每個點著色,要求有邊相連的點顏色不同。

給出著色方案。

思路:

由於每個點出度不超過3,四個顏色,肯定可以有解。暴力列舉即可。由於圖的點很多,邊少。在尋找和點相連的點時,不要按點遍歷,要按邊遍歷,否則會超時。

**:

class solution 

}if(flag == true)

continue;

int ret = dfs(index+1, n);

if(ret == 0)

return 0;

}return -1;

}vectorgardennoadj(int n, vector>& paths) ;

int maxsumafterpartitioning(vector& a, int k)

void da(int str, int sa, int rank, int height, int n, int m)

int k = 0;

n--;

for (i = 0; i <= n; i++)

rank[sa[i]] = i;

for (i = 0; i < n; i++)

}int num_rank[maxn], height[maxn];

int num[maxn];

int sa[maxn];

} // namespace sa

class solution

num[n] = 0;

da(num, sa, num_rank, height, n, 256);

for (int i = 2; i <= n; ++i)

}return s.substr(pos, len);

}};

Leetcode 第136場周賽解題報告

週日的比賽的時候正在外面辦事,沒有參加。賽後看了下題目,幾道題除了表面要考的內容,還是有些能發散擴充套件的地方。做題目不是最終目的,通過做題發現知識盲區,去研究學習,才能不斷提高。理論和實際是有關係的,一些題目也都有現實意義。計算機的一些模擬操作,通過數學演算法,能夠大大減輕 量和演算法複雜度。第一...

Leetcode 第136場周賽 前三題)

5055.困於環中的機械人 在無限的平面上,機械人最初位於 0,0 0,0 0,0 處,面朝北方。機械人可以接受下列三條指令之一 g g g 直走 1 11 個單位 l l l 左轉 90 9090度 r r r 右轉 90 9090 度機械人按順序執行指令 ins truc tion sinstr...

leetcode 第132場周賽

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...