第 196 場力扣周賽題解

2021-10-07 19:31:46 字數 1364 閱讀 1671

5452. 判斷能否形成等差數列

思路:排序後直接看相鄰元素的差是否唯一即可。

class solution 

}

5453. 所有螞蟻掉下來前的最後一刻

思路:這題千萬不要往難了想,雖然你要回頭,但是你仔細想想,假如乙個螞蟻往左走的過程中,遇到乙個往右走的螞蟻,此時兩隻螞蟻都要朝著其各自原來相反的方向繼續走,則對於每乙隻螞蟻來說,他原本方向剩下要走的路會讓呢個撞他的螞蟻繼續走,呢不就是找最大值了嘛。

class solution 

}

5454. 統計全 1 子矩形

思路:這道題是之前做過一道題的簡化版,因為n只有150這麼大,因此我們完全可以考慮o(n^3)的複雜度過這道題,我們知道原始暴力是o(n^4)的,為了降低複雜度,我們可以考慮字首和預處理,例如我採用的是預處理出每一行的字首和,不過這個字首和有些特殊,若當前位是0,則sum[i][j]=0,而不是sum[i][j]=sum[i][j-1],這一點是需要注意的,之後我們可以暴力乙個點,然後枚舉行並順帶儲存行的字首最小值,我們就能計算出以該點為右上角的矩形數量。

class solution 

}for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

}return ans;

}}

5455. 最多 k 次交換相鄰數字後得到的最小整數

吐槽:這道題我必須要吐槽一下了,明明是一道質量很好的題,偏偏資料賊弱,比賽時讓很多連第三題都沒過的人都暴力過了這道題,這樣對過了第三題卻沒過第四題的人來說公平嘛?好像上週雙周賽也是,我寫了半天的位運算優化狀壓dp,結果賽後發現一坨人暴力過的?what?

思路:貪心思想其實賊簡單,我們每次要找的一定是當前能移動到最前面的最小數,這裡的最前面是指從已排好的位置的下乙個位置,但是我們往往限於暴力置換使得複雜度達到o(n^2),我們其實唯一要解決的問題就是當前要往前移動的數應該移動多少次。我們考慮預處理出每種數的個數以及分別在那些位置上存在,之後我們考慮從小到大開始移動,當前元素可以移動的條件是當且僅當某乙個位置上該元素能夠在k步之內移動到最前面,而它的移動次數我們需要靠一些資料結構進行優化,我們的目的是快速的找到當前位置到最前邊中,有哪些位置是已經排好的,我們可以借助樹狀陣列,當然線段樹也是ok的。

class solution }}

return ans;

}private int lowbit(int x)

private void add(int x, int v)

}private int get(int x)

return res;

}}

力扣第196場周賽題解

比賽心得 本次比賽的經歷讓我大致地了解到了力扣周賽的難度 主要是前兩題比較簡單 第三題難度加深 最後一題相比來說最難。隨著難度層次的逐漸加深,知識點也逐漸增多,而且周賽涉及到的知識點也比較廣泛,是一種很好的測驗和檢驗水平的方法。知識點 排序 遍歷 分析 簡單題,遍歷即可 給你乙個數字陣列 arr 如...

LeetCode第196場周賽題解

2020.7.5第196場周賽 判斷乙個給定的數列能否形成乙個等差數列。先將給定的數列排序,判斷每兩個相鄰的數的差值是否相等即可。class solution return true 給定兩個陣列,分別表示向左走和向右走的螞蟻的初始位置,n為木板的總長度,兩隻螞蟻相遇時會改變方向,計算最後乙隻螞蟻從...

第185場力扣周賽題解

5388.重新格式化字串 思路 做法很多,我的方法是定義兩個佇列分別存數字和字元,然後在滿足題目要求能夠格式化的情況下穿插著加入答案即可。class solution if math.abs q1.size q2.size 1 return if q1.size q2.size work q1,q2...