週日的比賽的時候正在外面辦事,沒有參加。賽後看了下題目,幾道題除了表面要考的內容,還是有些能發散擴充套件的地方。
做題目不是最終目的,通過做題發現知識盲區,去研究學習,才能不斷提高。
理論和實際是有關係的,一些題目也都有現實意義。計算機的一些模擬操作,通過數學演算法,能夠大大減輕**量和演算法複雜度。
第一題是機械人在座標系上直走和轉彎,通過簡單的模擬就能實現。但是仔細思考發現還能通過線性代數,座標變換的方式做,這樣在實際中計算更快。甚至還可以用複數來做。
實際掃地機械人可能就用到了類似的演算法。讓他能夠不至於始終原地打轉。
第四題是典型的字尾樹、字尾陣列應用,找字串最長重複子串。在搜尋引擎,或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解釋 愛...