首页 > 其他分享 >【每日一题】3250. 单调数组对的数目 I

【每日一题】3250. 单调数组对的数目 I

时间:2024-11-28 23:11:40浏览次数:8  
标签:数组 nums 3250 Sum arr2 arr1 单调

 题目:

给你一个长度为 n 的 正 整数数组 nums 。

如果两个 非负 整数数组 (arr1, arr2) 满足以下条件,我们称它们是 单调 数组对:

  • 两个数组的长度都是 n 。
  • arr1 是单调 非递减 的,换句话说 arr1[0] <= arr1[1] <= ... <= arr1[n - 1] 。
  • arr2 是单调 非递增 的,换句话说 arr2[0] >= arr2[1] >= ... >= arr2[n - 1] 。
  • 对于所有的 0 <= i <= n - 1 都有 arr1[i] + arr2[i] == nums[i] 。

请你返回所有 单调 数组对的数目。

由于答案可能很大,请你将它对 109 + 7 取余 后返回。

   
class Solution:
    def countOfPairs(self, nums: List[int]) -> int:
        MOD = 1000000007
        n = len(nums)
        
        # 定义dfs(i,j)表示arr1[i]=j时填充前i-1个位置的数组对总数
        @cache
        def dfs(i, j):
            # 边界情况
            if i == 0:
                return 1
            res = 0
            # 当前nums[i-1]=k的最大范围
            max_k = min(nums[i - 1], min(j, nums[i - 1] - nums[i] + j))
            for k in range(max_k + 1):
                res += dfs(i - 1, k)
                res %= MOD
            return res
        
        Sum = 0
        # 枚举nums[n-1]所有可能填充的值
        for j in range(nums[n - 1] + 1):
            Sum += dfs(n - 1, j)
            Sum %= MOD
        return Sum

 

 

标签:数组,nums,3250,Sum,arr2,arr1,单调
From: https://www.cnblogs.com/xxlm/p/18575428

相关文章

  • [笔记]动态规划优化(斜率优化,决策单调性优化)
    本文主要记录某些动态规划思路及动态规划优化。首先先把以前写过的斜率优化祭出来。斜率优化\(\text{P5017[NOIP2018普及组]摆渡车}\)经典例题。设\(f_i\)表示最后班车在\(i\)时刻发车,所有人等待时间和的最小值。(这里的所有人是指到达时刻小于等于\(i\)的所有人)。......
  • 力扣33.搜索旋转排序数组
    题目描述题目链接题目链接整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0<=k<nums.length)上进行了 旋转,使数组变为 [nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标 从0开始 ......
  • 2024-11-28:边界元素是最大值的子数组数目。用go语言,给定一个正整数数组 nums,需要找到
    2024-11-28:边界元素是最大值的子数组数目。用go语言,给定一个正整数数组nums,需要找到满足子数组中第一个和最后一个元素都是该子数组中的最大值的子数组数量。输入:nums=[1,4,3,3,2]。输出:6。解释:总共有6个子数组满足第一个元素和最后一个元素都是子数组中的最大值:......
  • js数组遍历
    JS中遍历数组经常用到,这里总结了6种遍历方法,以及各种方法的优劣。1.for遍历数组1.1for的普通遍历varname=['One','Two','Three'];//for循环for(vari=0;i<name.length;i++){console.log(name[i]);}1.2for优化版遍历varname=['One','Two&......
  • C语言笔记——数组
    一维数组C语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。C中的数组1、数组的定义格......
  • 数组去重,属性相同的对象也算重复 Object.is使用
    console.log(Object.is(+0,-0))//false但是控制台为trueconsole.log(Object.is(NaN,NaN))//true但是控制台是falseconstuniqueArray=(arr)=>{constresult=[]outer:for(constitemofarr){for(rofresult){if(equals(r,item))......
  • 代码随想录 -- 单调栈 -- 每日温度
    单调栈适用场景一维数组中,求任意元素左边(右边)第一个比他大(小)的元素的位置。使用时明确单调栈中存放的是数组下标单调栈是递增还是递减每日温度739.每日温度-力扣(LeetCode)思路:题目中要求当前元素的右边比当前元素大的第一个元素的位置,所以单调栈是递增的,单调栈中存......
  • js对象和类型化制数组互相转换的方法
    js对象和类型化数组互相转换的方法//对象转化为类型化数组functionjsonToTypedArray(obj){constjsonString=JSON.stringify(obj)constencodedString=encodeURIComponent(jsonString)letbase64=btoa(encodedString)constencoder=newTe......
  • Java程序基础⑤Java数组的定义和使用+引用的概念
    目录1.Java数组的基本概念1.1数组的定义1.2数组存在的意义1.3数组的使用1.4二维数组2. 引用类型+JVM的内存分布2.1JVM的内存分布2.2 基本数据类型和引用型数据类型的区别2.3引用注意事项2.4传值传递3.数组总结和应用场景3.1一维数组和二维数组的存储3......
  • 数组使用
    一.动态初始化数组类型数组名【】=new数组类型【大小】或数组类型【】数组名=new数据类型【大小】(语法:数据类型数组名[];也可以数据类型[]数组名)步骤:1.创建一个数组第一种动态分配方式:doublearr[]=newdouble[5]double[]arr=newdouble[5]第二种动态......