LeetCode 2021 春季赛

简介: LeetCode 2021 春季赛

1. 采购方案

小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。

注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1

示例 1:

输入:nums = [2,5,3,5], target = 6

输出:1

解释:预算内仅能购买 nums[0] 与 nums[2]。

示例 2:

输入:nums = [2,2,1,9], target = 10

输出:4

解释:符合预算的采购方案如下:

nums[0] + nums[1] = 4

nums[0] + nums[2] = 3

nums[1] + nums[2] = 3

nums[2] + nums[3] = 10

提示:

  • 2 <= nums.length <= 10^5
  • 1 <= nums[i], target <= 10^5

思路:


image.png

整体代码如下:

public class Solution{
    public int purchasePlans(int[] nums, int target) {
        Arrays.sort(nums);
        int r = nums.length - 1;
        long res = 0;
        int mod = (int) 1e9 + 7;
        for (int l = 0; l < r; l++) {
            while (r > l && nums[l] + nums[r] > target) {
                r--;
            }
            res = (res + r - l) % mod;
        }
        return (int) res;
    }
}

3. 魔塔游戏

小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造成伤害值,即血量减少对应数值;0 表示房间对血量无影响。

小扣初始血量为 1,且无上限。假定小扣原计划按房间编号升序访问所有房间补血/打怪,为保证血量始终为正值,小扣需对房间访问顺序进行调整,每次仅能将一个怪物房间(负数的房间)调整至访问顺序末尾。请返回小扣最少需要调整几次,才能顺利访问所有房间。若调整顺序也无法访问完全部房间,请返回 -1。

示例 1:

输入:nums = [100,100,100,-250,-60,-140,-50,-50,100,150]

输出:1

解释:初始血量为 1。至少需要将 nums[3] 调整至访问顺序末尾以满足要求。

示例 2:

输入:nums = [-200,-300,400,0]

输出:-1

解释:调整访问顺序也无法完成全部房间的访问。

提示:

  • 1 <= nums.length <= 10^5
  • -10^5 <= nums[i] <= 10^5

思考:

这个题可以考虑用贪心的做法来做:

对于每一个怪物房间,可以考虑首先将当前使得血量总值不满足正数的且绝对值最大的放到最后,这样子调整的次数会是最少的,证明如下:

image.png

考虑到了需要用优先队列来维护怪物造成伤害值的值,因此需要借助PriorityQueue,注意是从大到小排序,存进去的顺序是怪物造成伤害值的绝对值。

res来记录调整的次数,last变量来维护每次调整到最后的一个怪物伤害值大小的绝对值的和,来与前面所有调整后血量还不为0的血量总和sum来进行比较,如果调整后的所有伤害值大小last比一直增加的血量和sum要大,则说明无论如何调整都不可能满足题目条件,否则输出res

class Solution {
    public int magicTower(int[] nums) {
        int len = nums.length;
        long last = 0;
        long sum = 1;
        int res = 0;
        PriorityQueue<Integer> q = new PriorityQueue<>((x,y) -> y - x);
        for (int i = 0; i < len; i++) {
            if (nums[i] >= 0) {
                sum += nums[i];
            } else {
                q.add(-nums[i]);
                if (-nums[i] > sum) {
                    int poll = q.poll();
                    res++;
                    sum += poll;
                    last += poll;
                }
                sum += nums[i];
            }
        }
        if (sum <= last) {
            return -1;
        }
        return res;
    }
}


相关文章
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
Web App开发 移动开发 前端开发
Chrome各个版本小常识
Chrome各个版本小常识
|
2月前
|
自然语言处理 运维 物联网
大模型微调技术入门:从核心概念到实战落地全攻略
本课程系统讲解大模型微调核心技术,涵盖全量微调与高效微调(LoRA/QLoRA)原理、优劣对比及适用场景,深入解析对话定制、领域知识注入、复杂推理等四大应用,并介绍Unsloth、LLaMA-Factory等主流工具与EvalScope评估框架,助力从入门到实战落地。
|
6月前
|
供应链 物联网 新制造
小型企业MES管理系统的开发要点
本内容深入解析了小型企业MES管理系统开发的核心要点。围绕精准功能定位、极致用户体验、灵活配置及数据安全四大核心,探讨了如何打造轻量、高效、易用的智能制造系统。同时,分析了MES在SaaS云化、AI智能、IoT连接等技术驱动下的发展方向,助力中小企业实现数字化转型与可持续发展。
181 0
|
11月前
|
传感器 人工智能 算法
解决宇树科技的机器人难题,IFR和分离原则或可一用?
法思诺创新专注于解决机器人行业难题,如宇树科技所面临的基层AI能力不足问题。通过最终理想解(IFR)与四大分离原则(时间、条件、空间、系统级别),为机器人智能化发展提供科学策略。文章分析了机器人在工业与生活场景中的应用挑战,并提出按需定制功能以降低成本、提升效率的解决方案。未来,机器人将深度融入各领域,开启人机共存新时代。法思诺还提供TRIZ创新实战工作坊等课程,助力软硬一体化智能创新。
244 0
|
存储 Ubuntu JavaScript
如何使用Docker优化你的开发环境配置
如何使用Docker优化你的开发环境配置
|
人工智能 供应链 安全
|
存储 Java PHP
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
【JVM】垃圾回收机制(GC)之引用计数和可达性分析
277 0
|
Android开发 iOS开发 UED
探索iOS与安卓的用户体验设计差异
本篇文章深入探讨了iOS和安卓两大移动操作系统在用户体验设计上的核心差异。通过对比分析,揭示两个系统的设计哲学、交互模式以及视觉语言如何影响用户的感知和使用习惯。文章不仅聚焦于设计理念和技术实现,还关注用户反馈和市场趋势,以期为设计师提供跨平台设计的洞见。
|
自然语言处理 JavaScript 前端开发

热门文章

最新文章