LeetCode第 278 場周賽題解

2022-09-19 20:54:18 字數 2499 閱讀 1861

題目描述:給你乙個陣列\(nums\)和乙個整數\(x\),若\(x\)在陣列中就將\(x\)乘以\(2\),否則返回\(x\)的值。

思路:使用map儲存陣列中的值,然後根據題意模擬即可

時間複雜度:\(o(nlogn)\)

class solution 

};

題目描述:給你乙個只有01的陣列,將陣列分成兩部分,左邊部分的分數為0的個數,右邊部分為1的個數,分組得分為左右部分的分數之和,求所有使得分組得分最高的下標。

思路:比較簡單的dp,根據題意模擬即可。

時間複雜:\(o(n)\)

class solution 

for(int i = n ; i >= 1 ; --i)

vectorres;

int max = 0;

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

}return res;

}};

題目描述:給定長度為\(n\)的字串\(s\),求其長度為\(k\)的所有子串中滿足等式:

\[\sum\limits_^ t_i \times p^ \% mod = hashvalue

\]且出現最早的子串。其中\(t\)表示長度為\(k\)的子串,字元\(t_i\)的整數值為\(t_i - 'a' + 1\)。

思路:賽時思路為:考慮到下列等式:

\[s_i*p^0 + s_*p^1 + ..+ s_*p^\\

= \frac + s_*p^ + ..+ s_*p^}}

\]那麼我們可以將\(b^i *hashvalue\) 作為等式的右邊,在取模的情況下檢驗左右兩邊是否相等。但將分母乘過去再取模可能會存在hash衝突,比較保險的做法是求\(b^i\)的逆元,但其逆元可能不存在,我當時的做法時在檢驗到相等的時候,再代入檢驗一遍,**如下:

class solution 

//for(auto ha : has) cout << ha <<" " ;

//cout << endl;

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

if(tmp == hashvalue) return s.substr(i - k , k);}}

return "";

}};

上述**是可以被卡掉的。

後來考慮到字串hash的式子:

\[hash = \sum\limits_^ s_i * p^

\]那我們將字串\(s\)轉置一下,那麼上式就變成了

\[hash = \sum\limits_^ t_i * p^\;\;t_i = s_

\]跟題目所求式子相同,故可以將字串\(s\)轉置,然後預處理其字串hash值,然後根據該值找到相對應的答案。

時間複雜度:\(o(n)\)

class solution 

auto gethash = [&](int lr , int rs)->int;

int idx = 0;

for(int i = 1 ; i <= n - k + 1 ; ++i)

string res = s.substr(idx - 1 , k);

reverse(res.begin() , res.end());

return res;

}};

題目描述:自己看題目吧,雖然題目描述讀起來怪怪的。

思路:考慮到每個字串中的每種字元最多出現一次,所以考慮將字串使用陣列表示,例如字串ab,可以用3表示。然後每乙個字串當做乙個點,我們根據題目的規則去列舉其能產生的點,若列舉到的點存在,那麼就將這兩個點所對應的連通塊合併,故其中需要使用並查集。最後的答案就是連通塊的數量和最大的連通塊中點的數量。注意到可能存在相同的字串,需要特判。

時間複雜度:\(o(26^2n)\)

\(n\)為字串的數量。

class solution 

auto find = [&] (auto find , int x)->int;

auto cal = [&](string& s)->int;

auto solve = [&](int x, int idx)->void

mp[x] = idx;

for(int i = 0 ; i < 26 ; ++i)

for(int i = 0 ; i < 26 ; ++i)

}return ;

};for(int i = 1 ; i <= n ; ++i)

vectorres(2 , 0);

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

return res;

}};

leetcode 第132場周賽

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

leetcode周賽 第176場

題目描述 給你乙個 m n 的矩陣 grid,矩陣中的元素無論是按行還是按列,都以非遞增順序排列。請你統計並返回 grid 中 負數 的數目。示例 1 輸入 grid 4,3,2,1 3,2,1,1 1,1,1,2 1,1,2,3 輸出 8 解釋 矩陣中共有 8 個負數。示例 2 輸入 grid 3...

leetcode 第 180 場周賽

大佬都是3 5分鐘一題,而我10分鐘一題,最後一題還不會。qaq 5356.矩陣中的幸運數 給你乙個m n的矩陣,矩陣中的數字各不相同。請你按任意順序返回矩陣中的所有幸運數。幸運數是指矩陣中滿足同時下列兩個條件的元素 class solution object def luckynumbers se...