5185. 存在連續三個奇數的陣列
從 i = 2 開始列舉,檢查 arr[i-2], arr[i-1], arr[i] 是否均為奇數。
class
solution
}return
false;}
};
5488. 使陣列中所有元素相等的最小運算元
陣列 arr 滿足 arr[i] = (2 * i) + 1 ( 0 <= i < n )。
其所有元素的累加和為 ((2*1+1)+(2*n+1))*n/2,化簡後為 (n+2)*n。
有累加和可知,操作完成後,每個元素均為 n+2。
操作前,arr 中總共有 x 個元素小於 n+2,x=⌊
n/2⌋
x = \lfloor n/2 \rfloor
x=⌊n/2
⌋。這 x 個元素的累加和為⌊n(
n+4)
/4⌋\lfloor n(n+4)/4\rfloor
⌊n(n+4
)/4⌋
。操作後,前 x 個元素的累加和為 ⌊(n
+2)n
/2⌋\lfloor(n+2)n/2\rfloor
⌊(n+2)
n/2⌋
。因為每次操作,小於 n+2 的元素的累加和會增加一,所以兩和作差即為答案,⌊(n
2)/4
⌋\lfloor(n^2)/4\rfloor
⌊(n2)/4⌋。
class
solution
};
5489. 兩球之間的磁力
換個題目的描述方式,向 n 個筐中放入m個球,使距離最近的一對球的距離最遠。
劃重點,一般題目**現最近最遠,最小最大,應該就是在考察二分/三分了。
可用二分演算法求解的題目必須具備單調性:如果閾值 x 有解,那麼所有小於 x 的閾值均有解。如果閾值 y 沒有解,那麼所有大約 y 的閾值均沒有解。
嘗試證明下這道題的單調性:
既然滿足單調性,直接套上二分模板,然後運用貪心演算法,檢查是否存在方案滿足閾值 mid 即可。
class
solution}}
return
false;}
intmaxdistance
(vector<
int>
& position,
int m)
else
}return l-1;}};
5490. 吃掉 n 個橘子的最少天數
題目中給出了三種策略:
最直接的思路就是暴力搜尋:
f (n
)=mi
nf(n-1) + 1 \\ f(n/2) + 1,n\%2 == 0 \\ f(n/3) + 1, n\%3 == 0 \\ \end\right.
f(n)=m
in⎩⎨
⎧f(
n−1)
+1f(
n/2)
+1,n
%2==
0f(n
/3)+
1,n%
3==0
但是這樣暴力,即使用上記憶化,也要計算 n 個子問題。既然太慢了,那就嘗試優化一下。
觀察一下上述式子,可以發現是只使用策略一導致了較多的計算量,而且當 n 較大時,只使用策略一顯然不是最優解。
只使用一次策略三和多次策略一需要 n%3 + 1 + n/3天。
顯然當 n >= 3 時,後兩種組合方案比第一種僅使用策略一的方案更優。
後兩種組合方案,哪個更優呢?不知道哪個更有鴨,只好都算一下然後取較小值咯,反正計算量也很小了~
總結一下:
當 n <= 2 時,f(n) = n。
當 n > 2 時有:
Leetcode 第 202 場周賽
感覺就是拼手速的比賽,沒什麼意思,再打幾次把排名打到前面就不打了。存在連續三個奇數的陣列 給你乙個整數陣列 arr,請你判斷陣列中是否存在連續三個元素都是奇數的情況 如果存在,請返回 true 否則,返回 false class solution return false 使陣列中所有元素相等的最小...
LeetCode第202場周賽
用等差數列求和公式計算一下就知道,不管n為多少,所有數的和都是n 2,這樣平均數就是n,由於陣列前半部分和後半部分關於n對稱 關於中間位置對稱的兩個位置的 兩個元素相加和為2 n 所以我們只需要遍歷陣列的前半部分,把所有數和n的差值加起來,就是最終的答案了。首先,題目給的position陣列可能是無...
LeetCode 第 202 場周賽 題解
思路 暴力 簽到題,暴力遍歷即可。class solution return false 複雜度分析 遍歷陣列,時間複雜度o n 沒有使用額外變數,空間複雜度為o 1 思路 數學 根據題意,可以直接將陣列以中心元素為對稱點,兩兩配對,操作的次數相同。所以只需要針對陣列長度奇偶進行分析即可。實現細節 ...