給你兩個陣列nums1
和nums2
。
請你返回nums1
和nums2
中兩個長度相同的非空子串行的最大點積。
陣列的非空子序列是通過刪除原陣列中某些元素(可能乙個也不刪除)後剩餘數字組成的序列,但不能改變量字間相對順序。比方說,[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。請注意...