前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m , 数组下标 从 1 开始 计数。

2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m , 数组下标 从 1 开始 计数。

作者头像
福大大架构师每日一题
发布2022-04-13 09:34:02
4930
发布2022-04-13 09:34:02
举报
文章被收录于专栏:福大大架构师每日一题

2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m ,

数组下标 从 1 开始 计数。

初始时,你的分数为 0 。

你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要:

选择数组 nums 开头处或者末尾处 的整数 x 。

你获得 multipliers[i] * x 分,并累加到你的分数中。

将 x 从数组 nums 中移除。

在执行 m 步操作后,返回 最大 分数。

力扣1770。

答案2022-04-09:

样本对应模型。

代码用golang编写。代码如下:

代码语言:javascript
复制
package main

import "fmt"

func main() {
  nums := []int{-5, -3, -3, -2, 7, 1}
  multipliers := []int{-10, -5, 3, 4, 6}
  ret := maximumScore2(nums, multipliers)
  fmt.Println(ret)
}

func maximumScore2(A, B []int) int {
  if len(A) == 0 || len(B) == 0 || len(A) < len(B) {
    return 0
  }
  N := len(A)
  M := len(B)
  dp := make([][]int, M+1)
  for i := 0; i < M+1; i++ {
    dp[i] = make([]int, M+1)
  }
  for L := M - 1; L >= 0; L-- {
    for j := L + 1; j <= M; j++ {
      R := N - M + j - 1
      indexB := L + N - R - 1
      dp[L][j] = getMax(A[L]*B[indexB]+dp[L+1][j], A[R]*B[indexB]+dp[L][j-1])
    }
  }
  return dp[0][M]
}

func getMax(a, b int) int {
  if a > b {
    return a
  } else {
    return b
  }
}

执行结果如下:

***

[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_01_1_week/Code03_MaximumScoreFromPerformingMultiplicationOperations.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档