LeetCode周賽記錄 第196場周賽

2021-10-07 21:05:37 字數 3213 閱讀 4707

2023年7月5日, leetcode第196場周賽個人記錄。第一次參加leetcode周賽,4道題目完成3道,中國排名163,全球排名377。對我個人來說算是個普通成績吧。以後打算每兩周參加一次周賽,同時利用部落格記錄下每次的成績,同時分享一下對於題目的個人想法和感受。

給你乙個數字陣列 arr 。

如果乙個數列中,任意相鄰兩項的差總等於同乙個常數,那麼這個數列就稱為 等差數列 。

如果可以重新排列陣列形成等差數列,請返回 true ;否則,返回 false 。

示例 1:

輸入:arr = [3,5,1]

輸出:true

解釋:對陣列重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相鄰兩項的差分別為 2 或 -2 ,可以形成等差數列。

示例 2:

輸入:arr = [1,2,4]

輸出:false

解釋:無法通過重新排序得到等差數列。

題目鏈結1502.判斷能否形成等差數列

第一題算是一道送分題,由等差數列的性質,等差數列相鄰兩項的差為定值,判斷乙個陣列能否形成等差數列,可以直接sort排序,再遍歷陣列判斷相鄰項的差是否為定值。

class

solution

};

時間複雜度:時間主要消耗在sort排序中,sort使用快排,時間複雜度為o(nlogn)。

空間複雜度:o(1)

有一塊木板,長度為 n 個 單位 。一些螞蟻在木板上移動,每只螞蟻都以 每秒乙個單位 的速度移動。其中,一部分螞蟻向 左 移動,其他螞蟻向 右 移動。

當兩隻向 不同 方向移動的螞蟻在某個點相遇時,它們會同時改變移動方向並繼續移動。假設更改方向不會花費任何額外時間。

而當螞蟻在某一時刻 t 到達木板的一端時,它立即從木板上掉下來。

給你乙個整數 n 和兩個整數陣列 left 以及 right 。兩個陣列分別標識向左或者向右移動的螞蟻在 t = 0 時的位置。請你返回最後乙隻螞蟻從木板上掉下來的時刻。

比賽的時候被這道題卡了好久,一直到結束都沒想出來,一直感覺很可惜,困難的題目都做出來了,被一道中等難度的題卡住。這道題其實很簡單,硬要說的話其實是一道腦經急轉彎,不然被相遇掉頭給迷惑到,因為每乙隻螞蟻是一樣的,相遇掉頭和相遇穿過本質上是相同的,所以這道題就是求哪知螞蟻離木板邊緣最遠,我們只要遍歷兩個陣列就可以得出答案。

class

solution

};

時間複雜度:o(n)

空間複雜度:o(1)

給你乙個只包含 0 和 1 的 rows * columns 矩陣 mat ,請你返回有多少個 子矩形 的元素全部都是 1 。

題目鏈結1504.統計全1子矩形

這道題也算是運氣好,在周賽前正好遇到了相同的題目所以雖然題目很難,但是思路還是很清晰的。看到這種題目首先想到的是暴力法,對遍歷每乙個元素,以這個元素為矩形的左上角,同時列舉所有可能的長和寬,判斷這個矩形是否滿足全1這個條件。但是這種方法的時間複雜度為o( m³ n³),m和n是矩陣的行和列,題目中m和n最高可達150,資料規模就達到了10^13 數量級,肯定會超時的。這裡提一下,一般來說c/c++的資料規模在10 ^7,超過就會超時。這樣就要考慮時間上的優化。這裡介紹柱狀圖方法,時間複雜度可以達到o(m²n)。

首先我們把每個元素當成矩形的右下角,之所以是右下角,是為了讓迴圈從下標0開始遞增,符合我們的思路。我們利用動態規劃的思想求出每乙個元素左側連續的1的個數,我們用dp[i][j]表示第i行j列的元素連續1的個數。我們可以在o(mn)的複雜度下完成。之後,對每個元素,我們遍歷它可能的寬度,為了便於理解,我們用高度來稱呼寬度,想象矩形是立起來的。當高度是1時,以當前元素為右下角形成的子矩形的個數就是dp[i][j],這很好理解,這裡就不多贅述了,當高度變為2時,以當前元素為右下角形成的子矩形的個數為 min(dp[i][j], dp[i - 1][j],這裡可能有點難以理解,但是讓我們來看乙個例子。

0 1 1

1 1 1

我們以第2行第3列的這個元素為例,dp[2][3] = 3, dp[1][3] = 2,首先這個元素為子矩陣的右下角,高度為1時,dp[2][3]就是可能形成的矩陣個數,當高度為2時,我們可以把高度為2的矩陣當成兩個高度為1的矩陣的組合,所以個數為兩個dp中小的那乙個。由此類推,當高度增加時,我們要繼續取最小的dp。

class

solution}}

return sum;}}

;

給你乙個字串 num 和乙個整數 k 。其中,num 表示乙個很大的整數,字串中的每個字元依次對應整數上的各個 數字 。

你可以交換這個整數相鄰數字的數字 最多 k 次。

請你返回你能得到的最小整數,並以字串形式返回。

這道題難度不大,首先看到交換相鄰的數字,這應該能讓我們想到應該算我我們遇見的第乙個演算法–氣泡排序法。在仔細觀察,這道題本質上就是乙個限制了交換次數的氣泡排序,按照氣泡排序法的思想,外迴圈控制當前判斷的是哪一位數,內迴圈尋找出最小的數。只不過普通的氣泡排序法內迴圈是可以遍歷整個陣列,而現在我們只能遍歷最多k次,所以我們只要多加上乙個判斷就可以了。

完成了大體的思路後,我們有一些細節要處理,首先我們知道,氣泡排序的處理次數是n * (n - 1) / 2 - 1,所以當k大於這個數時,實際上就是進行了一次氣泡排序,我們可以直接sort然後返回。另外就是交換,我們不需要真的進行交換,我們只要知道,交換後的結果相當於把最後乙個數提到了最開頭,我們可以用insert和erase實現。最後注意一下判斷的邊界條件,是否需要加等號。

class

solution

int head =0;

// 記錄當前在查詢哪一位的最小值

while

(k >

0&& head < size)

//外迴圈

if(minindex != head)

//當head就是最小的數時,移動沒有意義

++head;

}return num;}}

;

第一次參加周賽,也算是知道了人外有人,天外有天,我4道題總用時75分鐘,平均下來一道題也有接近20分鐘,而且還有一道題目沒有做出來,而高排名的大佬4道題一共只用了20分鐘。這次周賽算是對我這乙個月刷題的總結,希望以後的自己能多多努力。

Leetcode 周賽記錄

希望能記錄到八月中旬開學吧。反正就沒啥意義 周賽回到了他溫柔可人的樣子 前兩周的分割我感覺可能寫起來會比較吃力 40 min搞定,很愉快 a字串分割沒啥好說的。b的話我覺得它應該降低記憶體空間或者增大長度,一看只有七個都brute force了。就不好玩了orz c葉子的定義有毛病 我很奇怪為什麼有...

Leetcode第130次周賽

第一題 水題 第二題 網上有關於 2進製的公式,就不贅述。下面講一下我自己的解法。用陣列a i 儲存其二進位制 首先對於i 1,3,奇數字進行處理,若奇數字為0,不做處理,若奇數字為1,則向前面的偶數字進1 對於i 0,2,偶數字進行處理時,若偶數字為0,1,均不做處理,若偶數字為2,此時需分兩種情...

leetcode 第132場周賽

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