1458 兩個子串行的最大點積

2021-10-11 02:25:13 字數 1552 閱讀 7366

題目描述:給你兩個陣列 nums1 和 nums2 。

請你返回 nums1 和 nums2 中兩個長度相同的 非空 子串行的最大點積。

陣列的非空子序列是通過刪除原陣列中某些元素(可能乙個也不刪除)後剩餘數字組成的序列,但不能改變量字間相對順序。比方說,[2,3,5] 是 [1,2,3,4,5] 的乙個子串行而 [1,5,3] 不是。

解題思路:動態規劃dp[i][j]表示nums1[:i+1]nums2[:j+1]的長度相同的非空子序列的最大點積,他的結果一共分為三種情況(1)最大點積沒有用到nums1[i],那麼結果就是dp[i-1][j](2)如果最大點積沒有用到nums2[j],那麼結果就是dp[i][j-1],(3)同時用到了nums1[i]和nums2[j],那麼結果就是nums1[i]*nums2[j]再加上dp[i-1][j-1],如果它大於零的話,**如下:

class

solution

:def

maxdotproduct

(self, nums1: list[

int]

, nums2: list[

int])-

>

int:

size1 =

len(nums1)

size2 =

len(nums2)

dp =[[

0]* size2 for _ in

range

(size1)

] dp[0]

[0]= nums1[0]

* nums2[0]

for i in

range(1

, size2)

: dp[0]

[i]=

max(dp[0]

[i-1

], nums2[i]

*nums1[0]

)for i in

range(1

, size1)

: dp[i][0

]=max(dp[i-1]

[0], nums1[i]

*nums2[0]

)for i in

range(1

, size1)

:for j in

range(1

, size2)

: dp[i]

[j]=

max(dp[i-1]

[j], dp[i]

[j-1

], nums1[i]

*nums2[j]

+(dp[i-1]

[j-1

]if dp[i-1]

[j-1

]>

0else0)

)return dp[-1

][-1

]

兩個子串行的最大點積

給你兩個陣列nums1和nums2。請你返回nums1和nums2中兩個長度相同的非空子串行的最大點積。陣列的非空子序列是通過刪除原陣列中某些元素 可能乙個也不刪除 後剩餘數字組成的序列,但不能改變量字間相對順序。比方說,2,3,5 是 1,2,3,4,5 的乙個子串行而 1,5,3 不是。示例 1...

Leetcode之兩個子串行的最大點積

題目 給你兩個陣列 nums1 和 nums2 請你返回 nums1 和 nums2 中兩個長度相同的 非空 子串行的最大點積。陣列的非空子序列是通過刪除原陣列中某些元素 可能乙個也不刪除 後剩餘數字組成的序列,但不能改變量字間相對順序。比方說,2,3,5 是 1,2,3,4,5 的乙個子串行而 1...

阿里筆試題 求兩個子串行的最大連續子串行

給定乙個query和乙個text,均由小寫字母組成。要求在text中找出以相同的順序連續出如今query中的最長連續字母序列的長度。比如。query為 acbac text為 acaccbabb 那麼text中的 cba 為最長的連續出如今query中的字母序列,因此。返回結果應該為其長度3。請注意...