当前位置: 首页 > news >正文

LeetCode 2960.统计已测试设备

给你一个长度为 n 、下标从 0 开始的整数数组 batteryPercentages ,表示 n 个设备的电池百分比。

你的任务是按照顺序测试每个设备 i,执行以下测试操作:

如果 batteryPercentages[i] 大于 0:
增加 已测试设备的计数。
将下标在 [i + 1, n - 1] 的所有设备的电池百分比减少 1,确保它们的电池百分比 不会低于 0 ,即 batteryPercentages[j] = max(0, batteryPercentages[j] - 1)。
移动到下一个设备。
否则,移动到下一个设备而不执行任何测试。
返回一个整数,表示按顺序执行测试操作后 已测试设备 的数量。

示例 1:

输入:batteryPercentages = [1,1,2,1,3]
输出:3
解释:按顺序从设备 0 开始执行测试操作:
在设备 0 上,batteryPercentages[0] > 0 ,现在有 1 个已测试设备,batteryPercentages 变为 [1,0,1,0,2] 。
在设备 1 上,batteryPercentages[1] == 0 ,移动到下一个设备而不进行测试。
在设备 2 上,batteryPercentages[2] > 0 ,现在有 2 个已测试设备,batteryPercentages 变为 [1,0,1,0,1] 。
在设备 3 上,batteryPercentages[3] == 0 ,移动到下一个设备而不进行测试。
在设备 4 上,batteryPercentages[4] > 0 ,现在有 3 个已测试设备,batteryPercentages 保持不变。
因此,答案是 3 。
示例 2:

输入:batteryPercentages = [0,1,2]
输出:2
解释:按顺序从设备 0 开始执行测试操作:
在设备 0 上,batteryPercentages[0] == 0 ,移动到下一个设备而不进行测试。
在设备 1 上,batteryPercentages[1] > 0 ,现在有 1 个已测试设备,batteryPercentages 变为 [0,1,1] 。
在设备 2 上,batteryPercentages[2] > 0 ,现在有 2 个已测试设备,batteryPercentages 保持不变。
因此,答案是 2 。

提示:

1 <= n == batteryPercentages.length <= 100
0 <= batteryPercentages[i] <= 100

法一:遍历输入数组,记下未测试数量即可:

class Solution {
public:int countTestedDevices(vector<int>& batteryPercentages) {int notTestNum = 0;for (int i = 0; i < batteryPercentages.size(); ++i){// 如果当前遍历到的设备之前的设备都测试过,则应该减i,但还有notTestNum个未测试设备if (batteryPercentages[i] - i + notTestNum <= 0){++notTestNum;}}return batteryPercentages.size() - notTestNum;}
};

如果batteryPercentages的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

法二:刚意识到直接记录已测试的数量代替未测试的数量,直接就是答案:

class Solution {
public:int countTestedDevices(vector<int>& batteryPercentages) {int testNum = 0;for (int i = 0; i < batteryPercentages.size(); ++i){if (batteryPercentages[i] - testNum > 0){++testNum;}}return testNum;}
};

如果batteryPercentages的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

相关文章:

  • 哈希表在Java中的使用和面试常见问题
  • 【C语言】linux内核ipoib模块 - ipoib_ib_post_receive
  • leetcode hot100 买卖股票最佳时机3
  • 4.4 MySQL存储
  • Springboot集成Druid实现监控功能
  • 【力扣hot100】刷题笔记Day13
  • BlackberryQ10 是可以安装 Android 4.3 应用的,Web UserAgent 版本信息
  • React歌词滚动效果(跟随音乐播放时间滚动)
  • LeetCode刷题笔记之回溯算法(一)
  • 从ChatGPT到Sora,来了解大模型训练中的存储
  • 记录 | docker内修改host方法
  • Android14之input高级调试技巧(一百八十八)
  • C++ 学习之函数对象
  • Stable Diffusion 绘画入门教程(webui)-ControlNet(深度Depth)
  • Day13-Linux系统用户管理知识精讲2
  • ES6语法详解(一)
  • HTML-表单
  • js如何打印object对象
  • js写一个简单的选项卡
  • React的组件模式
  • springboot_database项目介绍
  • 阿里云前端周刊 - 第 26 期
  • 判断客户端类型,Android,iOS,PC
  • 收藏好这篇,别再只说“数据劫持”了
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 函数计算新功能-----支持C#函数
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #pragma预处理命令
  • (C语言)字符分类函数
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (接口自动化)Python3操作MySQL数据库
  • (排序详解之 堆排序)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)基于IDEA的JAVA基础12
  • (转)JAVA中的堆栈
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .apk 成为历史!
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET gRPC 和RESTful简单对比
  • .NET6 命令行启动及发布单个Exe文件
  • .net经典笔试题
  • @Autowired 与@Resource的区别
  • @property @synthesize @dynamic 及相关属性作用探究
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [@Controller]4 详解@ModelAttribute
  • [04]Web前端进阶—JS伪数组
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Codeforces] probabilities (R1600) Part.1