LeetCode第 200 場周賽詳解

2021-10-08 22:09:58 字數 4106 閱讀 4557

題意:

給你乙個整數陣列arr,以及abc三個整數。請你統計其中好三元組的數量。

如果三元組(arr[i], arr[j], arr[k])滿足下列全部條件,則認為它是乙個 好三元組 。

0 <= i < j < k < arr.length

|arr[i] - arr[j]| <= a

|arr[j] - arr[k]| <= b

|arr[i] - arr[k]| <= c

資料範圍:

3 <= arr.length <= 100

0 <= arr[i] <= 1000

0 <= a, b, c <= 1000

思路:簡單的列舉即可

**:

class

solution

return ret;}}

;

題意:

給你乙個由 不同 整數組成的整數陣列arr和乙個整數k

每回合遊戲都在陣列的前兩個元素(即arr[0]arr[1])之間進行。比較arr[0]arr[1]的大小,較大的整數將會取得這一回合的勝利並保留在位置0,較小的整數移至陣列的末尾。當乙個整數贏得k個連續回合時,遊戲結束,該整數就是比賽的贏家 。

返回贏得比賽的整數。

題目資料 保證 遊戲存在贏家。

資料範圍:

2 <= arr.length <= 10^5

1 <= arr[i] <= 10^6

arr所含的整數各不相同

1 <= k <= 10^9

思路:首先按照模擬思路來想,如果比賽進行的次數足夠多,使得陣列中每個元素都被比較了的話,那麼最終留下的整數必定是最大值,而且最大值將一直贏下接下來所有的比賽。明白這一點就好做了,直接模擬思路,從前往後去比較,並記錄目前該元素贏下比賽的次數,如果所有陣列元素都比較過了還沒得出贏家,那麼贏家就是最大值。

**:

class

solution

if(cost == k)

return cur;

}return cur;}}

;

題意:

給你乙個n x n的二進位制網格grid,每一次操作中,你可以選擇網格的相鄰兩行進行交換。乙個符合要求的網格需要滿足主對角線以上的格仔全部都是0

請你返回使網格滿足要求的最少操作次數,如果無法使網格符合要求,請你返回-1

主對角線指的是從(1, 1)(n, n)的這些格仔。

示例

資料範圍:

n == grid.length

n == grid[i].length

1 <= n <= 200

grid[i][j] == 0 or 1

思路:可以看到每一行末尾連續要求的0的個數是遞減的,比如對於乙個3 × 3的網格來說,第一行末尾連續的0的個數需要>= 2,第二行末尾連續的0的個數需要>= 1,那麼放在第一行能滿足的某一行當然放在第二行也滿足條件。所以我們可以從上往下依次貪心地去取離當前第k行最近的且可以滿足當前這行的條件的grid[i], i >= k,即末尾連續0的個數>= n - k - 1,然後將其向上一直交換至第k行。

**:

class

solution

int ans =0;

for(

int i =

0; i < n;

++i)

return ans;}}

;

題意:

你有兩個有序且陣列內元素互不相同的陣列nums1nums2

一條合法路徑定義如下:

選擇陣列nums1或者nums2開始遍歷(從下標0處開始)。從左到右遍歷當前陣列。如果你遇到了nums1nums2中都存在的值,那麼你可以切換路徑到另乙個陣列對應數字處繼續遍歷(但在合法路徑中重複數字只會被統計一次)。

得分定義為合法路徑中不同數字的和。請你返回所有可能合法路徑中的最大得分。

由於答案可能很大,請你將它對10^9 + 7取餘後返回。

示例

資料範圍:

1 <= nums1.length <= 10^5

1 <= nums2.length <= 10^5

1 <= nums1[i], nums2[i] <= 10^7

nums1 和 nums2 都是嚴格遞增的陣列

思路:我們可以用雙指標+動態規劃來解這道題。

f1[i]表示從陣列nums1下標i出發可以獲得的最大分數。

f2[i]表示從陣列nums2下標i出發可以獲得的最大分數。

則最終返回結果就是max(f1[0], f2[0]) % (1e9 + 7);

這裡我們需要從後往前遞推,因為路徑是從前往後走的,所以要對f1[i], f2[i]進行狀態轉移我們需要知道f1[i + 1], f2[i + 1],利用雙指標是為了保證切換至另外乙個陣列的時候,可以更新狀態。比如:nums1[i] == nums2[j]f1[i], f2[j]可以通過切換陣列來更新狀態,這時需要保證f1[i], f2[j]已經計算過不在這點切換陣列的次優路徑。

(這道題的狀態轉移只跟上乙個狀態有關,其實是可以進行狀態壓縮的,有興趣的同學可以試一下。)

**:

typedef

long

long ll;

class

solution

else

if(nums1[k1]

> nums2[k2]

)else

}while

(k1 >=0)

while

(k2 >=0)

return

max(f1[0]

, f2[0]

)% mod;}}

;

能直接睡到11:20我也是醉了,冒著掉分的危險打了這場比賽,最後一題12:00調出來沒趕上,沒仔細看題,重複數字統計了兩次/(ㄒoㄒ)/~~

codeforce的比賽暫時不寫了,翻譯題目好累好累的,主要自己也寫不了多少題,基本都是官方的tutorial的搬運工,卑微。

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