leetcode 5801. 消灭怪物的最大数量(C++、java、python)

leetcode 5801. 消灭怪物的最大数量(C++、java、python),第1张

概述你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从0开始 且长度为 n 的整数数组 dist ,其中 dist[i] 是第 i 个怪物与城市的 初始距离(单位:米)。怪物以 恒定 的速度走向城市。给你一个长度为 n 的整数数组 speed 表示每个怪物的速度,其

你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 n 的整数数组 dist ,其中 dist[i] 是第 i 个怪物与城市的 初始距离(单位:米)。

怪物以 恒定 的速度走向城市。给你一个长度为 n 的整数数组 speed 表示每个怪物的速度,其中 speed[i] 是第 i 个怪物的速度(单位:米/分)。

怪物从 第 0 分钟 时开始移动。你有一把武器,并可以 选择 在每一分钟的开始时使用,包括第 0 分钟。但是你无法在一分钟的中间使用武器。这种武器威力惊人,一次可以消灭任一还活着的怪物。

一旦任一怪物到达城市,你就输掉了这场游戏。如果某个怪物 恰 在某一分钟开始时到达城市,这会被视为 输掉 游戏,在你可以使用武器之前,游戏就会结束。

返回在你输掉游戏前可以消灭的怪物的 最大 数量。如果你可以在所有怪物到达城市前将它们全部消灭,返回  n 。

示例 1:

输入:dist = [1,3,4], speed = [1,1,1]输出:3解释:第 0 分钟开始时,怪物的距离是 [1,3,4],你消灭了第一个怪物。第 1 分钟开始时,怪物的距离是 [X,2,3],你没有消灭任何怪物。第 2 分钟开始时,怪物的距离是 [X,1,2],你消灭了第二个怪物。第 3 分钟开始时,怪物的距离是 [X,X,1],你消灭了第三个怪物。所有 3 个怪物都可以被消灭。

示例 2:

输入:dist = [1,1,2,3], speed = [1,1,1,1]输出:1解释:第 0 分钟开始时,怪物的距离是 [1,1,2,3],你消灭了第一个怪物。第 1 分钟开始时,怪物的距离是 [X,0,1,2],你输掉了游戏。你只能消灭 1 个怪物。

示例 3:

输入:dist = [3,2,4], speed = [5,3,2]输出:1解释:第 0 分钟开始时,怪物的距离是 [3,2,4],你消灭了第一个怪物。第 1 分钟开始时,怪物的距离是 [X,0,2],你输掉了游戏。 你只能消灭 1 个怪物。

提示:

n == dist.length == speed.length1 <= n <= 1051 <= dist[i], speed[i] <= 105

C++

class Solution {public:    int eliminateMaximum(vector<int>& dist, vector<int>& speed) {        int n=dist.size();        vector<int> time;        for(int i=0;i<n;i++) {            if(dist[i]%speed[i]==0) {                time.push_back(dist[i]/speed[i]);            } else {                time.push_back(dist[i]/speed[i]+1);            }        }        sort(time.begin(),time.end());        queue<int> que;        for(int i=0;i<n;i++) {            que.push(time[i]);        }        int ans=0;        int num=0;        while(!que.empty()) {            if(que.front()>num) {                ans++;                num++;                que.pop();            } else {                break;            }        }        return ans;    }};

java

class Solution {    public int eliminateMaximum(int[] dist, int[] speed) {        int n = dist.length;        int[] time = new int[n];        for (int i = 0; i < n; i++) {            if (dist[i] % speed[i] == 0) {                time[i] = dist[i] / speed[i];            } else {                time[i] = dist[i] / speed[i] + 1;            }        }        Arrays.sort(time);        Queue<Integer> que = new linkedList<>();        for (int i = 0; i < n; i++) {            que.offer(time[i]);        }        int ans = 0;        int num = 0;        while (!que.isEmpty()) {            if (que.peek() > num) {                num++;                ans++;                que.poll();            } else {                break;            }        }        return ans;    }}

python

import queueclass Solution:    def eliminateMaximum(self, dist: List[int], speed: List[int]) -> int:        n = len(dist)        time = []        for i in range(n):            if dist[i] % speed[i] == 0:                time.append(dist[i] // speed[i])            else:                time.append(dist[i] // speed[i] + 1)        time.sort()        que = queue.Queue()        for i in range(n):            que.put(time[i])        num = 0        ans = 0        while not que.empty():            if que.get() > num:                num += 1                ans += 1            else:                break        return ans

总结

以上是内存溢出为你收集整理的leetcode 5801. 消灭怪物的最大数量(C++、java、python)全部内容,希望文章能够帮你解决leetcode 5801. 消灭怪物的最大数量(C++、java、python)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1185139.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存