【每日一题】2809. 使数组和小于等于 x 的最少时间-2024.1.19

题目:

2809. 使数组和小于等于 x 的最少时间

给你两个长度相等下标从 0 开始的整数数组 nums1nums2 。每一秒,对于所有下标 0 <= i < nums1.lengthnums1[i] 的值都增加 nums2[i] 。操作 完成后 ,你可以进行如下操作:

  • 选择任一满足 0 <= i < nums1.length 的下标 i ,并使 nums1[i] = 0

同时给你一个整数 x

请你返回使 nums1 中所有元素之和 小于等于 x 所需要的 最少 时间,如果无法实现,那么返回 -1

示例 1:

复制代码
输入:nums1 = [1,2,3], nums2 = [1,2,3], x = 4
输出:3
解释:
第 1 秒,我们对 i = 0 进行操作,得到 nums1 = [0,2+2,3+3] = [0,4,6] 。
第 2 秒,我们对 i = 1 进行操作,得到 nums1 = [0+1,0,6+3] = [1,0,9] 。
第 3 秒,我们对 i = 2 进行操作,得到 nums1 = [1+1,0+2,0] = [2,2,0] 。
现在 nums1 的和为 4 。不存在更少次数的操作,所以我们返回 3 。

示例 2:

复制代码
输入:nums1 = [1,2,3], nums2 = [3,3,3], x = 4
输出:-1
解释:不管如何操作,nums1 的和总是会超过 x 。

提示:

  • 1 <= nums1.length <= 103
  • 1 <= nums1[i] <= 103
  • 0 <= nums2[i] <= 103
  • nums1.length == nums2.length
  • 0 <= x <= 106

解答:

代码:

复制代码
class Solution {
    public int minimumTime(List<Integer> nums1, List<Integer> nums2, int x) {
        int n=nums1.size(),s1=0,s2=0;
        int[] dp=new int[n+1];
        List<List<Integer>> nums=new ArrayList<>();
        for(int i=0;i<n;i++){
            int a=nums1.get(i),b=nums2.get(i);
            nums.add(Arrays.asList(b,a));
            s1+=a;
            s2+=b;
        }
        Collections.sort(nums,(o1,o2)->Integer.compare(o1.get(0),o2.get(0)));
        for(int j=1;j<=n;j++){
            int b=nums.get(j-1).get(0),a=nums.get(j-1).get(1);
            for(int i=j;i>0;i--){
                dp[i]=Math.max(dp[i],dp[i-1]+i*b+a);
            }
        }
        for(int i=0;i<=n;i++){
            if(s2*i+s1-dp[i]<=x){
                return i;
            }
        }
        return -1;
    }
}

结果:

相关推荐
CodeRecycle22 分钟前
Python 自动配置 pip 支持库(通过 Windows Bat 脚本)
算法
liliangcsdn39 分钟前
特质偏度因子的计算示例和分析
算法
荆棘鸟智能1 小时前
无人机遥感图像实时拼接算法工程实践:从特征提取到全景融合的完整技术链路
算法·无人机
xxwxx__2 小时前
C++ STL set 与 map 全套详解:关联式容器、红黑树底层、代码坑点、刷题实战
数据结构·c++
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 58. 最后一个单词的长度 | C++ 极简反向遍历与单变量状态机
算法
AgentMaster2 小时前
企业如何应用智能客服?5 个典型场景的技术架构与实施路径
大数据·算法
程曦曦2 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
郝学胜-神的一滴2 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出流水线上的“独特零件编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
weixin_307779133 小时前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab