5613. 最富有客戶的資產總量
簽到題:
ac**
class
solution
ans = math.
max(ans, sum);}
return ans;
}}
5614. 找出最具競爭力的子串行
思路:
題目讓我們求乙個長度為k的最小子序列。ac**維護乙個大小為k的單調棧操作
1.在每次入棧前需要將當前元素和棧頂元素做比較,如果棧頂元素大於當前元素,則一直彈出棧。當後面的數不夠k - st.size() + 1個時,停止出棧。
2.維護的是大小為k的單調棧,不能讓棧的個數超過k個。
注意:這裡的單調棧只是利用單調棧思想,裡面存的資料不一定是單調的
例如 nums = [4, 3, 5, 2], k = 4 ,那麼進入棧裡面的數不是單調的。
class
solution
if(st.
size()
< k)
}int
ans =
newint
[k];
while
(k >0)
return ans;
}}
5615. 使陣列互補的最少操作次數
思路差分 + 掃瞄
我們考慮任意乙個數對(a,b),不妨假設a≤b。假設最終選定的和值為ans∈[2, 2 * limit],則我們可以發現,對於(a,b)這個數對:
ans的取值範圍
需要的操作次數
[2, a + 1)
2[a + 1, a + b)
1= a + b
0(a + b, b + limit]
1(b + limit, 2 * limit]
2我們怎樣來表示這段範圍類的值?這時我們要用差分的思想,將陣列中l到r這個區間同時加乙個a,則直接用差分陣列d[l] += a, d[r + 1] -= a; 然後再去掃瞄2到limit * 2這段區間,找乙個最小的ans即可.
ac**
class
solution
//在[2, a + 1)這段區間需要兩次操作
dif[2]
+=2; dif[a +1]
-=2;//在[a + 1, a + b) 這個區間需要一次操作。
dif[a +1]
++; dif[a + b]--;
//在(a + b, b + limit]這段區間需要一次操作
dif[a + b +1]
++; dif[b + limit +1]
--;//在(b + limit, 2 * limit]這段區間需要兩次操作
dif[b + limit +1]
+=2; dif[
2* limit +1]
-=2;}
int res = nums.length;
int sum =0;
for(
int i =
2; i <= limit *2;
++i)
return res;
}}
5616. 陣列的最小偏移量
思路將所有數都變為可變範圍的最大值,然後不斷縮小最大的數,直到不能縮小為止。
首先我們知道奇數只能變一次(乘以2變成偶數),偶數能變若干次(不斷除以2).例如:3:3,8;8:1,2,4,8.
如果去雙向變的話是不好控制的,我們不妨單向的變,將其都變成最大的偶數,然後再不縮小最大的數,利用優先佇列找最大與最小的差值.
ac**
class
solution
int res = st.
last()
- st.
first()
;while
(st.
size()
>0&&
(st.
last()
&1)==
0)return res;
}}
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...