LeetCode 第 180 場周賽 解題報告

2021-10-03 21:54:07 字數 3313 閱讀 2549

題目型別:暴力列舉

列舉每個元素,然後檢查是否符合幸運數的要求。

class

solution

if(matrix[i]

[j]> matrix[i]

[k])

}for

(int k =

0; flag && k < n; k++)if

(matrix[i]

[j]< matrix[k]

[j])}if

(flag)}}

return res;}}

;

題目型別:模擬,棧

使用 size 變數記錄棧的容量,使用 top 變數記錄棧頂位置。

坑點:進行 increment 操作時,棧內的元素可能不足 k 個。

const

int maxn =

1000

;class

customstack

void

push

(int x)

}int

pop(

)return-1

;}void

increment

(int k,

int val)}}

;

題目型別:樹的遍歷,遞迴,構造

先遍歷給出的二叉搜尋樹,按照中序遍歷的順序將樹中元素儲存下來。

根據公升序陣列構造平衡二叉搜尋樹:

如果陣列為空,則對應的樹亦為空。

如果陣列不為空,設長度為 n,那麼位置n

2\frac

2n​處的元素應為樹的根節點。子陣列 [1,

n2−1

][1, \frac-1]

[1,2n​

−1] 及 [n2

+1,n

][\frac+1, n]

[2n​+1

,n] 分別對應左右子樹。因為兩個子陣列的長度相差不會超過 1,所以保證了左右子樹的高度相差不會超過 1。

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

dfs(root-

>left, vec)

; vec.

push_back

(root-

>val)

;dfs

(root-

>right, vec);}

treenode*

construct

(const vector<

int>

&vec,

int l,

int r)

int mid =

(l+r)

>>1;

auto ptr =

newtreenode

(vec[mid]);

ptr-

>right =

construct

(vec, mid+

1, r)

; ptr-

>left =

construct

(vec, l, mid-1)

;return ptr;

}public

: treenode*

balancebst

(treenode* root)

vector<

int> data;

dfs(root, data)

;return

construct

(data,

0, data.

size()

-1);

}};

題目型別:快速排序,堆排序,列舉

c++知識點:std::priority_queue,std::greater,運算子過載

坑點:注意在運算過程中資料範圍有可能超出 int32。

std::priority_queue 可以參見

std::greater 可以參見

思考路書

當兩種方案的efficiency相等時,speed之和更大的方案顯然更優。

題目的輸入決定了最多有 n 種 efficiency。

對於每種 efficiency 肯定都會存在最優的方案。

最終答案肯定就是這個n種方案裡面最優的那個。

問題轉化成了如何快速求出每種 efficiency 的最優方案:

注意: 選取的 k 個最大speed對應的efficiency可能都大於當前列舉的 efficiency,但是這並不影響最終答案的正確性。因為如果這個選擇方案的確為最終答案的話,則其值必然記錄在其他 efficiency 的最優解中。

程式設計技巧:使用 std::priority_queue 代替堆排序**,提高編碼速度。

class

solution

bool

operator

<

(const engineer &r)

const};

vector data;

priority_queue<

int, vector<

int>

, greater<

int>> pq;

public

:int

maxperformance

(int n, vector<

int>

& speed, vector<

int>

& efficiency,

int k)

sort

(data.

begin()

, data.

end())

;int64_t sum =

0, anw =0;

for(

int i =

0; i < n; i++

) anw =

max(anw, sum * data[i]

.e);

}return anw%

(1000000007);

}};

leetcode 第 180 場周賽

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

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