题目描述
给你一个长度为 n
、下标从 0 开始的整数数组 batteryPercentages
,表示 n
个设备的电池百分比。
你的任务是按照顺序测试每个设备 i
,执行以下测试操作:
- 如果
batteryPercentages[i]
大于0
:- 增加 已测试设备的计数。
- 将下标在
[i + 1, n - 1]
的所有设备的电池百分比减少1
,确保它们的电池百分比 不会低于0
,即batteryPercentages[j] = max(0, batteryPercentages[j] - 1)
。 - 移动到下一个设备。
- 否则,移动到下一个设备而不执行任何测试。
返回一个整数,表示按顺序执行测试操作后 已测试设备 的数量。
EX1.
EX2.
提示
1 <= n == batteryPercentages.length <= 100
0 <= batteryPercentages[i] <= 100
代码实现
C语言
int countTestedDevices(int* batteryPercentages, int batteryPercentagesSize)
{
int i;
int j;//循环变量
int cnt=0;//计数器以统计已测试设备,记得初始化!!!(浪费了一次提交机会...)
for(i=0;i<batteryPercentagesSize;i++)//力扣给出的Size表示的是大小,下标在Size-1,<Size-1表示遍历到最后一个下标
{
if(batteryPercentages[i]==0)//如果电量是0,跳过该设备,即跳过该次循环
{
continue;
}
//如果没被跳过循环,要执行下边语句,这样写省略了一些选择逻辑
cnt++;//测试设备数量加一
for(j=i+1;j<batteryPercentagesSize;j++)//实现对之后的设备进行电量损耗
{
if(batteryPercentages[j]>0)//保证电量>=0
{
batteryPercentages[j]--;
}
}
}
return cnt;//最后返回已测试设备数量
}
执行情况
思路
第一次读题基本有一点想法了,看了示例基本能够理解,能够自己写出一个示例输入和草稿计算出示例输出,然后还是想到了循环结构(循环这玩意在算法好像还蛮重要的),而且双重循环出现尤为频繁,这道题蛮有意思的一点在于它的第二重循环需要结合判断逻辑,用于对测试设备之后的设备进行电量损耗,所以起点应该设置为当前设备。但总的来说这道题应该还算简单题...毕竟我两分钟就有了思路而且几分钟就写完了
总结
这个题我还是没有选择去继续优化内存使用和运行速度,因为实在是太简单了...题解区倒是有几个大佬写出双百代码...但可读性真的堪忧...我就先不放在这里了。还是瞎扯几句...昨天晚上用于放松的,昨晚原定的力扣计划也没实现,看看今天能不能补上?
继续沉淀。(最近又开始喜欢看励志视频了是怎么回事...)