動態規劃中等題

2021-10-07 15:21:19 字數 2785 閱讀 4317

在排序陣列中查詢元素的第乙個和最後乙個位置

class

solution

:def

searchrange

(self, nums: list[

int]

, target:

int)

-> list[

int]:if

not nums:

return[-

1,-1

] first_index = self.firstk(nums,target)

last_index= self.lastk(nums,target)

if first_index >

len(nums)-1

or nums[first_index]

!=target:

first_index =-1

if last_index <=

0or nums[last_index-1]

!=target:

last_index =

0return

[first_index,last_index-1]

deffirstk

(self,nums,target)

: left =

0 right =

len(nums)

while left < right:

mid =

(left + right)//2

if nums[mid]

< target:

left = mid +

1else

: right = mid

return left

deflastk

(self,nums,target)

: left =

0 right =

len(nums)

while left < right:

mid =

(left + right)//2

if nums[mid]

<= target:

left = mid +

1else

: right = mid

return left

跳躍遊戲

思路:一直更新能跳到的最大長度即可。

class

solution

:def

canjump

(self, nums: list[

int])-

>

bool:if

not nums:

return

k =0for i in

range

(len

(nums)):

if i > k or k >=

len(nums)-1

:break

if nums[i]

+ i > k:

k = nums[i]

+ i

if k >=

len(nums)-1

:return

true

else

:return

false

不同路徑

dp[i][j] = dp[i-1][j] + dp[i][j-1]

class

solution

:def

uniquepaths

(self, m:

int, n:

int)

->

int:

if m <=

0or n <=0:

return

0if m ==

1or n ==1:

return

1

pre_row =[1

]*(m -1)

pre_col =

1for i in

range(1

,n):

for j in

range

(m -1)

: pre_row[j]

= pre_col + pre_row[j]

pre_col = pre_row[j]

pre_col =

1return pre_row[m-

2]

關鍵是思考,想清楚關係,看是否能空間度也能達到最優

最長上公升子串行

class

solution

:def

lengthoflis

(self, nums: list[

int])-

>

int:

ifnot nums:

return

0 dp =

for i in

range

(len

(nums)):

1)for j in

range

(i):

if nums[i]

> nums[j]

: dp[i]

=max

(dp[i]

, dp[j]+1

)return

max(dp)

時間複雜度優化,動態規劃加二分查詢

Leetcode 打家劫舍II(中等)動態規劃

題目描述 你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不...

LeetCode 中等 動態規劃 硬幣面值

硬幣。給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模上1000000007 示例1 輸入 n 5 輸出 2 解釋 有兩種方式可以湊成總金額 5 55 1 1 1 1 1 示例2 輸入 n 10 輸出 4 解釋 有四種方式可以湊成總金額...

中等 動態規劃經典 堆石子問題

1.問題描述 設有n堆沙子排成一排,其編號為1,2,3,n n 100 每堆沙子有一定的數量。現要將n堆沙子並成為一堆。歸併的過程只能每次將相鄰的兩堆沙子堆成一堆,這樣經過n 1次歸併後成為一堆。找出一種合理的歸併方法,使總的代價最小。輸入格式 輸入由若干行組成,第一行有乙個整數,n 1 n 100...