add new solutions
This commit is contained in:
parent
9a10695e8c
commit
ca24d0a56a
30 changed files with 697 additions and 16 deletions
38
solutions/14/q1458/solution.go
Normal file
38
solutions/14/q1458/solution.go
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
package q1458
|
||||
|
||||
import "math"
|
||||
|
||||
func maxDotProduct(nums1 []int, nums2 []int) int {
|
||||
board := make([][]int, len(nums1))
|
||||
boardBuf := make([]int, len(nums1)*len(nums2))
|
||||
for i := range board {
|
||||
board[i] = boardBuf[i*len(nums2) : (i+1)*len(nums2)]
|
||||
}
|
||||
maxSingle := math.MinInt
|
||||
|
||||
for i1 := range nums1 {
|
||||
for i2 := range nums2 {
|
||||
prod := nums1[i1] * nums2[i2]
|
||||
maxSingle = max(maxSingle, prod)
|
||||
|
||||
if i1 > 0 && i2 > 0 {
|
||||
prod += board[i1-1][i2-1]
|
||||
}
|
||||
board[i1][i2] = max(0, prod)
|
||||
|
||||
if i2 > 0 {
|
||||
board[i1][i2] = max(board[i1][i2-1], board[i1][i2])
|
||||
}
|
||||
if i1 > 0 {
|
||||
board[i1][i2] = max(board[i1-1][i2], board[i1][i2])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if maxSingle <= 0 {
|
||||
return maxSingle
|
||||
}
|
||||
return board[len(nums1)-1][len(nums2)-1]
|
||||
}
|
||||
|
||||
var _ = maxDotProduct
|
||||
Loading…
Add table
Add a link
Reference in a new issue