[leetcode/lintcode 题解] 阿里算法面试真题详解:举重

简介: [leetcode/lintcode 题解] 阿里算法面试真题详解:举重

描述
奥利第一次来到健身房,她正在计算她能举起的最大重量。杠铃所能承受的最大重量为maxCapacity,健身房里有n个杠铃片,第 i 个杠铃片的重量为 weights[i]。奥利现在需要选一些杠铃片加到杠铃上,使得杠铃的重量最大,但是所选的杠铃片重量总和又不能超过 maxCapacity ,请计算杠铃的最大重量是多少。
比如,给定杠铃片的重量为 weights = [1, 3, 5], 而杠铃的最大承重为 maxCapacity = 7,那么应该选择重量为 1 和 5 的杠铃片,(1 + 5 = 6),所以最终的答案是 6。
1≤n≤42
1≤maxCapacity≤106
1≤weights[i]≤106

在线评测地址:领扣题库官网

样例1
输入:
[1,3,5]
7
输出:
6

解题思路
经典的背包问题。
状态:dp[j] 表示是否存在一种杠铃片的选择方案使杠铃的重量达到 j 初始化:dp[0] = true 如果一个杠铃片都不选,杠铃的重量就是 0 转移:dp[j] = dp[j] || dp[j - weight[i]] 如果已经存在一种方案可以是杠铃的重量达到 j 或 j - weight[i] 答案:dp[maxCapacity]

复杂度分析
时间复杂度:O(n * maxCapacity)
枚举每个杠铃片 O(n),枚举每个重量 O(maxCapacity)。两者是嵌套关系,所以是O(n * maxCapacity)
空间复杂度:O(maxCapacity)
dp数组的空间耗费

源代码

public class Solution {
    /**
     * @param weights: An array of n integers, where the value of each element weights[i] is the weight of each plate i
     * @param maxCapacity: An integer, the capacity of the barbell
     * @return: an integer denoting the maximum capacity of items that she can lift.
     */
    public int weightCapacity(int[] weights, int maxCapacity) {
        boolean[] dp = new boolean[maxCapacity + 1];
        dp[0] = true;
        int answer = 0;
        
        for (int i = 0; i < weights.length; i++) {
            int weight = weights[i];
            for (int j = maxCapacity; j >= weight; j--) {
                if (dp[j - weight]) {
                    dp[j] = true;
                    answer = Math.max(answer, j);
                }
            }
        }
        
        return answer;
    }
}

更多题解参考:九章官网solution

相关文章
|
11月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
10月前
|
监控 Java 数据安全/隐私保护
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
|
6月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
9月前
|
负载均衡 架构师 Cloud Native
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选  CP 还是 AP?为什么?
|
10月前
|
SQL Java 数据库连接
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
443 2
|
6月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
629 0
|
6月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
410 2
|
7月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
343 3