【两次过】Lintcode 970. 大生意

本文介绍了一种基于贪心算法的电影买卖策略,通过合理选择购买和出售电影的顺序,以有限的本金实现利润最大化。策略首先筛选出能盈利的电影,然后按买入成本升序和卖出价格降序进行排序,确保每次交易都能获得最大收益。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出两个数组aba[i]代表第i部影片的版权费,b[i]代表第i部影片能卖的钱,现在本金k,问最后最多能赚多少钱。(每部影片只需要买一次版权,只能卖一次。)

样例

样例 1:

输入:a = [3,1,5], b = [4,3,100], k = 1
输出:4
解释:先买第2部影片,再卖出,再买第1部影片,再卖出,最后本金变为4。

样例 2:

输入:a = [3,1,5], b = [4,3,100], k = 10
输出:108
解释:将全部影片买下,卖出,最后本金变为108。

注意事项

  • 所有输入均为不超过100000的正整数。
  • 数组大小不超过10000

解题思路:

贪心。新建一个Moive类用来存储电影的买入费和卖出费,方便后续排序。过滤掉不赚钱的影片后,先按照买入费升序,再按照卖出费降序排列,就能找到最多赚的钱。

public class Solution {
    class Moive{
        public int buy;
        public int sell;
        Moive(int buy, int sell){
            this.buy = buy;
            this.sell = sell;
        }
    }
    /**
     * @param a: The cost of the film
     * @param b: The price of the selling of the film
     * @param k: The principal
     * @return: The answer
     */
    public int bigBusiness(int[] a, int[] b, int k) {
        // Write your code here
        Moive[] movies = new Moive[a.length];
        for(int i=0; i<a.length; i++){
            //过滤掉不赚钱的生意
            if(a[i] >= b[i]){
                a[i] = 0;
                b[i] = 0;
            }
                
            movies[i] = new Moive(a[i], b[i]);
        }
            
        
        Arrays.sort(movies, new Comparator<Moive>(){
            @Override
            public int compare(Moive m1, Moive m2){
                if(m1.buy != m2.buy)
                    return m1.buy - m2.buy; //按照买入费升序排列
                return m2.sell - m1.sell;   //按照卖出费降序排列
            }
        });
        
        int res = k;
        for(int i=0; i<movies.length && res >= movies[i].buy; i++){
            res -= movies[i].buy;
            res += movies[i].sell;
        }
        
        return res;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值