[leetcode/lintcode 题解] 阿里算法面试题:切割剩余金属

简介: [leetcode/lintcode 题解] 阿里算法面试题:切割剩余金属

描述
金属棒工厂的厂长拥有 n 根多余的金属棒。当地的一个承包商提出,只要所有的棒材具有相同的长度(用 saleLength 表示棒材的长度),就将金属棒工厂的剩余棒材全部购买。厂长可以通过将每根棒材切割零次或多次来增加可销售的棒材数量,但是每次切割都会产生一定的成本(用 costPerCut 表示每次切割的成本)。等所有的切割完成以后,多余的棒材将被丢弃,没有利润。金属棒工厂的厂长获得的销售总利润计算公式如下:
totalProfit = totalUniformRods saleLength salePrice - totalCuts * costPerCut
其中 totalUniformRods 是可销售的金属棒数量,salePrice 是承包商同意支付的每单位长度价格,totalCuts是需要切割棒材的次数。

1≤n≤501≤n≤50
1≤lengths[i]≤1041≤lengths[i]≤10^4
1≤salePrice,costPerCut≤1031≤salePrice,costPerCut≤10^3

在线评测地址:领扣题库官网
https://www.lintcode.com/problem/1917/?utm_source=sc-tianchi-sz-0412

样例1
输入:
1
10
[30,59,110]
输出:
1913
AI 代码解读

算法 :模拟、暴力
解题思路
因为金属数量比较少,可以使用暴力遍历来寻找最优切割长度,在计算时要注意切割次数,如果刚好能够切成整数份(没有剩余金属)的话,是可以少切一刀的。
复杂度分析
时间复杂度:O(L*n)
L是最长金属的长度,n为金属数量
空间复杂度:O(1)
不需要额外空间
源代码

public class Solution {
    /**
     * @param costPerCut: integer cost to make a cut 
     * @param salePrice: integer per unit length sales price 
     * @param lengths: an array of integer rod lengths 
     * @return: The function must return an integer that denotes the maximum possible profit. 
     */
    public int maxProfit(int costPerCut, int salePrice, int[] lengths) {
        int profit = 0;
        int maxLen = 0;
        for (int i = 0; i < lengths.length; i++) {
            maxLen = Math.max(maxLen, lengths[i]);
        }
        
        for (int length = 1; length <= maxLen; length++) {
            int cut = 0, pieces = 0;
            for (int i = 0; i < lengths.length; i++) {
                int curCut = (lengths[i] - 1) / length;
                int curPiece = lengths[i] / length;
                if (length * salePrice * curPiece - costPerCut * curCut > 0) {
                    cut += curCut;
                    pieces += curPiece;
                }
            }
            profit = Math.max(profit, length * salePrice * pieces - costPerCut * cut);
        }
        
        return profit;
    }
}
AI 代码解读

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

目录
打赏
0
0
0
0
6
分享
相关文章
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
66 2
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
例如,在一个有 10 个节点的系统中,增加一个新节点,只会影响到该新节点在哈希环上相邻的部分数据,其他大部分数据仍然可以保持在原节点,大大减少了数据迁移的工作量和对系统的影响。狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由”。在 3 - 5 年的中期阶段,随着业务的稳定发展和市场份额的进一步扩大,订单数据的增长速度可能会有所放缓,但仍然会保持在每年 20% - 30% 的水平。
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
阿里面试:10WQPS高并发,怎么限流?这份答案让我当场拿了offer
在 Nacos 的配置管理界面或通过 Nacos 的 API,创建一个名为(与配置文件中 dataId 一致)的配置项,用于存储 Sentinel 的流量控制规则。上述规则表示对名为的资源进行流量控制,QPS 阈值为 10。resource:要保护的资源名称。limitApp:来源应用,default表示所有应用。grade:限流阈值类型,1 表示 QPS 限流,0 表示线程数限流。count:限流阈值。strategy:流控模式,0 为直接模式,1 为关联模式,2 为链路模式。
阿里面试:10WQPS高并发,怎么限流?这份答案让我当场拿了offer

热门文章

最新文章

  • 1
    云计算运维工程师面试技巧
    962
  • 2
    【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
    352
  • 3
    【机器学习】面试问答:决策树如何进行剪枝?剪枝的方法有哪些?
    252
  • 4
    【机器学习】SVM面试题:简单介绍一下SVM?支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择?SVM为什么采用间隔最大化?为什么要将求解SVM的原始问题转换为其对偶问题?
    234
  • 5
    【深度学习】Pytorch面试题:什么是 PyTorch?PyTorch 的基本要素是什么?Conv1d、Conv2d 和 Conv3d 有什么区别?
    779
  • 6
    【深度学习】TensorFlow面试题:什么是TensorFlow?你对张量了解多少?TensorFlow有什么优势?TensorFlow比PyTorch有什么不同?该如何选择?
    644
  • 7
    【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
    527
  • 8
    【数据挖掘】XGBoost面试题:与GBDT的区别?为什么使用泰勒二阶展开?为什么可以并行训练?为什么快?防止过拟合的方法?如何处理缺失值?
    614
  • 9
    【数据挖掘】 GBDT面试题:其中基分类器CART回归树,节点的分裂标准是什么?与RF的区别?与XGB的区别?
    214
  • 10
    【机器学习】过拟合和欠拟合怎么判断,如何解决?(面试回答)
    1088
  • AI助理
    登录插画

    登录以查看您的控制台资源

    管理云资源
    状态一览
    快捷访问

    你好,我是AI助理

    可以解答问题、推荐解决方案等