2025-03-23:单调数组对的数目Ⅱ。用go语言,给定一个长度为 n 的正整数数组 nums,我们需要找出所有的单调数组对。
单调数组对的定义是:两个非负整数数组 (arr1, arr2) 同时满足以下条件:
1.两个数组均为长度 n。
2.arr1 是单调非递减的,即 arr1[0] <= arr1[1] <= ... <= arr1[n - 1]。
3.arr2 是单调非递增的,即 arr2[0] >= arr2[1] >= ... >= arr2[n - 1]。
4.对于所有的 0 <= i <= n - 1,arr1[i] + arr2[i] 必须等于 nums[i]。
我们需要返回满足条件的单调数组对的总数。由于结果可能很大,因此需要将其对 1000000007 进行取余。
1 <= n == nums.length <= 2000。
1 <= nums[i] <= 1000。
输入:nums = [2,3,2]。
输出:4。
解释:
单调数组对包括:
([0, 1, 1], [2, 2, 1])
([0, 1, 2], [2, 2, 0])
([0, 2, 2], [2, 1, 0])
([1, 2, 2], [1, 1, 0])
题目来自leetcode3251。
总的时间复杂度是O(n * m),其中n为nums的长度,m为数组中的最大值;额外空间复杂度是O(n * m),用于存储dp数组。
package main
import (
"fmt"
)
func countOfPairs(nums []int)int {
n := len(nums)
m := 0
for _, num := range nums {
if num > m {
m = num
}
}
mod := int(1e9 + 7)
dp := make([][]int, n)
for i := range dp {
dp[i] = make([]int, m+1)
}
for a := 0; a <= nums[0]; a++ {
dp[0][a] = 1
}
for i := 1; i < n; i++ {
d := max(0, nums[i]-nums[i-1])
for j := d; j <= nums[i]; j++ {
if j == 0 {
dp[i][j] = dp[i-1][j-d]
} else {
dp[i][j] = (dp[i][j-1] + dp[i-1][j-d]) % mod
}
}
}
res := 0
for _, num := range dp[n-1] {
res = (res + num) % mod
}
return res
}
func max(a, b int)int {
if a > b {
return a
}
return b
}
func main() {
nums := []int{2, 3, 2}
result := countOfPairs(nums)
fmt.Println(result)
}
# -*-coding:utf-8-*-
defcount_of_pairs(nums):
n = len(nums)
m = max(nums)
mod = 10**9 + 7
dp = [[0] * (m + 1) for _ inrange(n)]
for a inrange(nums[0] + 1):
dp[0][a] = 1
for i inrange(1, n):
d = max(0, nums[i] - nums[i - 1])
for j inrange(d, nums[i] + 1):
if j == 0:
dp[i][j] = dp[i - 1][j - d]
else:
dp[i][j] = (dp[i][j - 1] + dp[i - 1][j - d]) % mod
res = sum(dp[n - 1]) % mod
return res
if __name__ == "__main__":
nums = [2, 3, 2]
result = count_of_pairs(nums)
print(result)
·
我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。 欢迎关注“福大大架构师每日一题”,让 Go 语言和算法助力您的职业发展
·
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有