首页 > 其他分享 >2024.2.6每日一题

2024.2.6每日一题

时间:2024-02-06 21:04:30浏览次数:27  
标签:2024.2 nums int hp 房间 小扣 ans 每日

LeetCode

魔塔游戏

LCP 30. 魔塔游戏 - 力扣(LeetCode)

题目描述

小扣当前位于魔塔游戏第一层,共有 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

思路

反悔贪心

代码

C++
class Solution {
public:
    int magicTower(vector<int>& nums) {
        if (accumulate(nums.begin(), nums.end(), 0LL) < 0) {
            return -1;
        }
        int ans = 0;
        long long hp = 1;
        priority_queue<int> h; // 最大堆
        for(int x : nums){
            if(x < 0){
                h.push(-x);
            }
            hp += x;
            if(hp < 1){
                hp += h.top();
                h.pop();
                ans++;
            }
        }
        return ans;
    }
};
Java
class Solution {
    public int magicTower(int[] nums) {
        long sum = 0;
        for(int x : nums){
            sum += x;
        }
        if(sum < 0){
            return -1;
        }

        int ans = 0;
        long hp = 1;
        PriorityQueue<Integer> h = new PriorityQueue<>();
        for(int x : nums){
            if(x < 0){
                h.offer(x);
            }
            hp += x;
            if(hp < 1){
                hp -= h.poll();
                ans++;
            }
        }
        return ans;
    }
}

image-20240206175738461

image-20240206175748706

标签:2024.2,nums,int,hp,房间,小扣,ans,每日
From: https://blog.51cto.com/u_16532753/9631165

相关文章

  • 2024.2.6
    1.Java不支持多继承但支持多重继承2.继承的特性·子类拥有父类非private的属性、方法·子类可以拥有自己的属性和方法,即子类可以对父类进行扩展·Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如B类继承A类,C类继承B类,所以按照关系就......
  • (python)代码学习||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/pythondefbalanced_parens(n):'''Toconstructallthepossiblestringswithnpairsofbalancedparenthesesthisfunctionmakesuseofastackofitemswiththefoll......
  • 每日总结
    Scala是ScalableLanguage的简写,是一门多范式的编程语言联邦理工学院洛桑(EPFL)的MartinOdersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。Odersky先前的工作是GenericJava和javac(SunJava编译器)。Java平台的Scala于......
  • 2024.2.5寒假每日总结27
    LeetCode跳跃游戏VI1696.跳跃游戏VI-力扣(LeetCode)题目描述给你一个下标从0开始的整数数组nums和一个整数k。一开始你在下标0处。每一步,你最多可以往前跳k步,但你不能跳出数组的边界。也就是说,你可以从下标i跳到[i+1,min(n-1,i+k)]包含两个端点的任......
  • (python)做题记录||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/python我的解决方案:defbalanced_parens(n):#Yourcodehere!used_l=[Falseforiinrange(n)]used_r=[Falseforiinrange(n)]answers=[]defprocess(answer):iflen(a......
  • 每日导数51
    利用极限找点定义函数满足\(f(x_0)=f^{\prime}(x_0)\)的实数\(x_0\)为函数\(y=f(x)\)的然点,已知\(f(x)=(\lnx+a)e^{-x}\)(1)证明:\(\foralla\in\mathbb{R}\),函数\(y=f(x)\)必有然点(2)设\(x_0\)为\(y=f(x)\)的然点,判断函数\(g(x)=f(x)-f(x_0)\)的零点个数并证明解(1)\(f^{\p......
  • 2024.1.21 ~ 2024.2.2 集训总结
    集训大纲Week1:图论:拓扑排序、欧拉回路、二分图、最小生成树数据结构:并查集、堆、单调队列week2:图论:连通性数据结构:线段树图论拓扑排序将DAG上的点以关联性进行排序,得到一个有关联的枚举顺序。有了这种特别的枚举顺序,使得在DAG上DP的转移过程更加合理且有......
  • 739、每日温度
    给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,......
  • 2024.2.4寒假每日总结26
    算法题:292.Nim游戏-力扣(LeetCode)LeetCodeNim游戏292.Nim游戏-力扣(LeetCode)题目描述你和你的朋友,两个人一起玩Nim游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉1-3块石头。拿掉最后一块石头的人就是获胜者。......
  • 2.4寒假每日总结25
    误详情:使用IDEA直接连接数据库报错:Serverreturnsinvalidtimezone.Goto'Advanced'tabandset'serverTimezone'propertymanually.错误原因:MySQL驱动中默认时区是UTC,与本地时间有时差。解决方案:点开最右侧导航栏Advanced,找到serverTimezone,在value处填写GMT保存 ......