兩個子串行的最大點積

2021-10-06 10:32:29 字數 1341 閱讀 9656

給你兩個陣列nums1nums2

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

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

示例 1:

輸入:nums1 = [2,1,-2,5], nums2 = [3,0,-6]

輸出:18

解釋:從 nums1 中得到子串行 [2,-2] ,從 nums2 中得到子串行 [3,-6] 。

它們的點積為 (2*3 + (-2)*(-6)) = 18 。

示例 2:

輸入:nums1 = [3,-2], nums2 = [2,-6,7]

輸出:21

解釋:從 nums1 中得到子串行 [3] ,從 nums2 中得到子串行 [7] 。

它們的點積為 (3*7) = 21 。

示例 3:

輸入:nums1 = [-1,-1], nums2 = [1,1]

輸出:-1

解釋:從 nums1 中得到子串行 [-1] ,從 nums2 中得到子串行 [1] 。

它們的點積為 -1 。

優秀正解:

int f[555][555];

class solution );

}return ret;

}};

非**作者題解:

動態規劃,dp[i][j]表示nums1[0...i]與nums2[0...j]的非空子序列最大點積,則狀態轉移為:

dp[i][j] = max(dp[i][j-1], dp[i-1][j], dp[i-1][j-1] + nums1[i]*nums2[j], nums1[i]*nums2[j]),max函式裡依次表示

只可能選取nums1[i]

只可能選取nums2[j]

兩個數都選

選且只選這兩個數

要注意的是,情況1和2已經包含了兩個數都不選的情況,之所以要單獨列出情況4,是為了防止之前累加了負數,而現在出現了正數,例如nums1=[-3,-8,3], nums2=[9,2,3]在遍歷到nums1[2]之前的情況

1458 兩個子串行的最大點積

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

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。請注意...