Leetcode周賽 202學習筆記

2021-10-09 06:50:57 字數 2867 閱讀 2593

leetcode官方題解

1552 兩球之間的磁力

題意理解:給定position陣列,從中選取m個,使得這m個資料中,任意兩個數的差值的最小值最大。比如:position = [1,2,3,6]m = 3。那麼所有的選取情況為[1,2,3][1,2,6][2,3,6][1,3,6]。每種情況下任意兩數差值的最小值為1112。那麼最終選取為:[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 思路 數學 根據題意,可以直接將陣列以中心元素為對稱點,兩兩配對,操作的次數相同。所以只需要針對陣列長度奇偶進行分析即可。實現細節 ...