leetcode官方題解
1552 兩球之間的磁力
題意理解:給定position
陣列,從中選取m
個,使得這m
個資料中,任意兩個數的差值的最小值最大。比如:position = [1,2,3,6]
,m = 3
。那麼所有的選取情況為[1,2,3]
、[1,2,6]
、[2,3,6]
、[1,3,6]
。每種情況下任意兩數差值的最小值為1
、1
、1
、2
。那麼最終選取為:[1,3,6]
,答案為:2
。
演算法思想:結合二分查詢的暴力測試(多見題型,才能開啟思路),每次選取乙個可能的最小磁力值,測試驗證是否可以滿足題意,直到找出最大的最小磁力值。難點在於邊界值的確定,最小磁力值的左邊界很好確定,遍歷一遍排序後的position陣列即可,對於右邊界,因為有m
個球,所以存在m-1
個縫隙。給定的position
陣列中的最大間距max_magnetic = position[-1] - position[0]
,因此可以計算得出,右邊界為:max_magnetic // (m-1)
。
# 判斷當前最小磁力值是否符合條件
defjudge
(length,position,m)
: res =
0 lens =
len(position)
l = r =
0while r < lens:
''' 若position[r] - position[l]大於等於當前最小磁力值,則在position[r]處放置乙個球
更新索引,繼續向下搜尋下乙個球的位置
'''if position[r]
- position[l]
>= length:
l = r
r +=
1 res +=
1else
: r +=
1if res >= m -1:
return
true
else
:return
false
lens =
len(position)
position.sort(
)min_magnetic =
float
("inf"
)# 確定最小邊界
for i in
range
(lens-1)
: min_magnetic =
min(min_magnetic, position[i+1]
-position[i]
)# 計算最大邊界
max_magnetic =
(position[-1
]- position[0]
)//(m-1
)# 二分查詢
while min_magnetic<=max_magnetic:
mid_magnetic =
(min_magnetic+max_magnetic)//2
if judge(mid_magnetic,position,m)
: min_magnetic = mid_magnetic +
1else
: max_magnetic = mid_magnetic -
1return min_magnetic -
1
1553 吃掉n個橘子最少的天數
題意理解:給定n
個橘子,每次可以吃1
個;若n
為偶數,則可以選擇吃n/2
個;若n
可以被3
整除,則可以選擇吃2*(n/3)
個。求最快多少次可以吃完。
演算法分析:dfs
,樸素dfs演算法因為重複計算會超時,需要改進。當n <= 3
時,答案顯而易見,那麼當n > 3
時,為了盡快吃完,可以先吃掉i
個,使得n-i
可以被3
或者2
整除。
def
dfs(i,dp)
:if i ==0:
return
0if i ==1:
return
1if i ==
2or i ==3:
return
2# 若已經計算過,則直接返回
if i in dp:
return dp[i]
# 返回使得 剩餘橘子可以被3整除的結果 和 可以被2整除的結果 的較小值,+1 是計算本次吃橘子的操作
dp[i]=1
+min
(dfs(i//
2,dp)
+i%2
, dfs(i//
3,dp)
+i%3
)return dp[i]
# 儲存已經計算的完成天數
dp =
dict()
return dfs(n,dp)
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 思路 數學 根據題意,可以直接將陣列以中心元素為對稱點,兩兩配對,操作的次數相同。所以只需要針對陣列長度奇偶進行分析即可。實現細節 ...