Leetcode 第133場周賽解題報告

2022-07-14 12:54:18 字數 2267 閱讀 6169

今天參加了leetcode的周賽,演算法比賽,要求速度比較快。有思路就立馬啟動,不會糾結是否有更好的方法或**可讀性。只要在演算法複雜度數量級內,基本上是怎麼實現快速就怎麼來了。

比賽時先看的第二題,一看題就有了思路,直接用的廣度優先搜尋,寫完提交正確。再一看有人都做了3道題了,應該是職業選手了,要多像他們看齊。

之後看第一題,發現直接用貪心就能做,寫了個雙重迴圈,一次過掉。

第三題求最優連續子陣列和,想到是動態規劃。然後在處理**細節上花了很長時間,中間提交還錯了一次,在十一點半左右提交通過。

再看第四題,能想到是trie樹和ac自動機,但是我手上沒有現成**,到比賽完也沒有完成。

本次比賽題目偏簡單,及時第四題如果經常做競賽也很容易寫。以後要多做些訓練,把常用的**整理下,否則比賽會比較耗時間。另外要多訓練演算法思維,一是在比賽時能夠思路快。二是演算法在工作中也比較重要,雖然很多時候都有封裝好的現成函式,但是知道其中的原理,能夠更高效地解決問題,對於新問題的思考也更全面更準確。

下面是今天比賽的詳細解題。

今天比賽的位址 weekly contest 133

題號:1029

題目:兩地排程(two city scheduling)

題意:2*n個人去a、b兩地,每個地方都只有n個人去,每個人去a、b兩地的費用分別給出,求總計最小費用。

思路:方法一:

有最優策略,先把2n個人隨意分成a、b兩個集合,每個集合n個人。a集合去a地,b集合去b地。然後對於a集合中每個人ai,到b集合中遍歷每個人bj,看是否能互換位置,讓整體費用更低。如果有則換位置,沒有檢查下乙個。全部換完則是最優解。

換的條件是ai去a的費用+bj去b的費用,要大於ai去b的費用+bj去a的費用。這樣bj與ai互換整體費用會最低。

時間複雜度o(n^2)

class solution }}

int sum = 0;

for(auto i : va)

for(auto i : vb)

return sum;

}};

方法二

把2n個人的費用排序,到b地比到a地超出差價大的人排在前面,最後讓前n個人去,排在前面的人去a地更划算。整體費用最低。

時間複雜度o(nlogn)

方法三動態規劃,此題有最優子結構。用f[n][m]表示n個人,派m個人去a地,所花費的最小錢數。這時再來乙個人,這個人有兩種選擇,一種是去a地,一種是去b地。

則更新如果去a地:f[n+1][m+1] = min(f[n+1][m+1], f[n][m]+costa);

如果去b地:f[n+1][m] = min(f[n+1][m], f[n][m]+costb);

costa、costb表示這個人去a、b的花費。

題號:1030

題目:距離順序排列矩陣單元格(matrix cells in distance order)

題意:給出矩陣的行列值,和乙個座標點r,輸出所有矩陣座標,按照每個點到r曼哈頓距離排序輸出。

兩個座標點(r1,c1)(r2,c2)的曼哈頓距離是|r1 - r2| + |c1 - c2|。

思路:方法一:直接求出每個點到給出座標的距離,再排序,然後輸出即可。

方法二:用廣度優先搜尋,每次搜尋到的點依次輸出即可。比方法一**麻煩。

class solution );

while(!q.empty())

);int dx=;

int dy=;

for(int k=0;k<4;++k)

};class trietree

int insert(string& word)

p=p->children[n];

}p->hasval=true;

return 0;

}bool query_has_r_suffix(string& word)

p=p->children[n];

if(p->hasval) return true;

}return false;

}};class streamchecker

}bool query(char letter)

};/**

* your streamchecker object will be instantiated and called as such:

* streamchecker* obj = new streamchecker(words);

* bool param_1 = obj->query(letter);

*/

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...