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

2024-1-19

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

在这里插入图片描述

思路:
  1. 获取两个列表的长度n,并初始化一个二维数组f,用于存储最优解。
  2. 定义一个二维数组nums,用于存储输入的两个列表中的元素,并按照第二列元素进行排序。
  3. 使用动态规划的方法,通过遍历nums数组,计算最优解。其中,f[i][j]表示将前i个元素分配到j个集合中时的最大总和。通过比较f[i-1][j]和f[i-1][j-1]+a+b*j的大小,更新f[i][j]。
  4. 计算两个列表中所有元素的和,分别存储在s1和s2中。
  5. 遍历0至n的范围,判断是否满足条件s1 + s2 * j - f[n][j] <= x,若满足则返回j。
  6. 若没有满足条件的j值,则返回-1
class Solution {
   
    public int minimumTime(List<Integer> nums1, List<Integer> nums2, int x) {
   
        int n = nums1.size();
        int[][] f = new int[n + 1][n + 1]; // 定义二维数组f,用于存储最优解
        int[][] nums = new int[n][0]; // 定义二维数组nums,用于存储输入的两个列表中的元素
        for (int i = 0; i < n; ++i) {
   
            nums[i] = new int[] {
   nums1.get(i), nums2.get(i)}; // 将输入的两个列表中的元素按照相同的索引放入nums数组中
        }
        Arrays.sort(nums, Comparator.comparingInt(a -> a[1])); // 根据nums数组中第二列的元素进行排序
        for (int i = 1; i <= n; ++i) {
   
            for (int j = 0; j <= n; ++j) {
   
                f[i][j] = f[i - 1][j]; // 初始化f[i][j]为f[i-1][j]
                if (j > 0) {
    // 当j大于0时,进行以下操作
                    int a = nums[i - 1][0], b = nums[i - 1][1];
                    f[i][j] = Math.max(f[i][j], f[i - 1][j - 1] + a + b * j); // 更新f[i][j],取当前值与f[i-1][j-1]+a+b*j的较大值
                }
            }
        }
        int s1 = 0, s2 = 0;
        for (int v : nums1) {
   
            s1 += v; // 计算nums1列表中所有元素的和,存储在s1中
        }
        for (int v : nums2) {
   
            s2 += v; // 计算nums2列表中所有元素的和,存储在s2中
        }

        for (int j = 0; j <= n; ++j) {
   
            if (s1 + s2 * j - f[n][j] <= x) {
    // 判断是否满足条件 s1 + s2 * j - f[n][j] <= x
                return j; // 返回满足条件的j值
            }
        }
        return -1; // 若没有满足条件的j值,则返回-1
    }
}

点击移步博客主页,欢迎光临~

偷cyk的图

最近更新

  1. TCP协议是安全的吗?

    2024-01-21 00:38:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-21 00:38:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-21 00:38:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-21 00:38:02       18 阅读

热门阅读

  1. Webpack5入门到原理3:基本配置

    2024-01-21 00:38:02       35 阅读
  2. python期末:常见模块的使用及计算生态

    2024-01-21 00:38:02       31 阅读
  3. 导出zoedepth的onnx模型并基于gradio实现在线部署

    2024-01-21 00:38:02       41 阅读
  4. Spring MVC学习之——上传文件

    2024-01-21 00:38:02       43 阅读
  5. 力扣54. 螺旋矩阵

    2024-01-21 00:38:02       41 阅读
  6. logback日志记录器

    2024-01-21 00:38:02       32 阅读
  7. C# 十大排序算法

    2024-01-21 00:38:02       28 阅读
  8. 第二章 变量与基本类型(上)

    2024-01-21 00:38:02       25 阅读
  9. 在vue中如何优雅的封装第三方组件

    2024-01-21 00:38:02       44 阅读
  10. 【Effective C++】让自己习惯C++

    2024-01-21 00:38:02       38 阅读
  11. 关于Qt Creator 的项目创建

    2024-01-21 00:38:02       38 阅读