519 隨機翻轉矩陣

2021-09-19 16:08:42 字數 976 閱讀 6339

題中給出乙個nn列的二維矩陣(n_rows,n_cols),且所有值被初始化為 0。要求編寫乙個flip函式,均勻隨機的將矩陣中的 0 變為 1,並返回該值的位置下標[row_id,col_id];同樣編寫乙個reset函式,將所有的值都重新置為 0。盡量最少呼叫隨機函式 math.random(),並且優化時間和空間複雜度。

注意:1.1 <= n_rows, n_cols <= 10000

2. 0 <= row.id < n_rows 並且 0 <= col.id < n_cols

3.當矩陣中沒有值為 0 時,不可以呼叫 flip 函式

4.呼叫 flip 和 reset 函式的次數加起來不會超過 1000 次

示例 1:

輸入: 

["solution","flip","flip","flip","flip"]

[[2,3],,,,]

輸出: [null,[0,1],[1,2],[1,0],[1,1]]

示例 2:

輸入: 

["solution","flip","flip","reset","flip"]

[[1,2],,,,]

輸出: [null,[0,0],[0,1],null,[0,0]]

輸入語法解釋:

輸入包含兩個列表:被呼叫的子程式和他們的引數。solution的建構函式有兩個引數,分別為n_rowsn_colsflipreset沒有引數,引數總會以列表形式給出,哪怕該列表為空

LeetCode519 隨機翻轉矩陣

因為n rows和n cols最大能到104,所以不能開二維陣列,因為那樣空間複雜度回到108。題目說了呼叫flip和reset的次數加起來不會超過1000次,所以矩陣是比較稀疏的,我們只需要記錄所有1的位置即可。我們可以用乙個雜湊表記錄所有1的位置。為了方便,我們把二維的位置對映到乙個int變數,...

LeetCode 隨機翻轉矩陣

題中給出乙個 n 行 n 列的二維矩陣 n rows,n cols 且所有值被初始化為 0。要求編寫乙個 flip 函式,均勻隨機的將矩陣中的 0 變為 1,並返回該值的位置下標 row id,col id 同樣編寫乙個 reset 函式,將所有的值都重新置為 0。盡量最少呼叫隨機函式 math.r...

翻轉矩陣後的得分

問題描述 有乙個二維矩陣 a 其中每個元素的值為 0 或 1 翻轉是指選擇任一行或列,並轉換該行或列中的每乙個值 將所有 0 都更改為 1,將所有 1 都更改為 0。在做出任意次數的翻轉後,將該矩陣的每一行都按照二進位制數來解釋,矩陣的得分就是這些數字的總和。返回盡可能高的分數。示例 輸入 0,0,...