[LeetCode] 2960. Count Tested Devices After Test Operations

You are given a 0-indexed integer array batteryPercentages having length n, denoting the battery percentages of n 0-indexed devices.

Your task is to test each device i in order from 0 to n - 1, by performing the following test operations:
If batteryPercentages[i] is greater than 0:
Increment the count of tested devices.
Decrease the battery percentage of all devices with indices j in the range [i + 1, n - 1] by 1, ensuring their battery percentage never goes below 0, i.e, batteryPercentages[j] = max(0, batteryPercentages[j] - 1).
Move to the next device.
Otherwise, move to the next device without performing any test.
Return an integer denoting the number of devices that will be tested after performing the test operations in order.

Example 1:
Input: batteryPercentages = [1,1,2,1,3]
Output: 3
Explanation: Performing the test operations in order starting from device 0:
At device 0, batteryPercentages[0] > 0, so there is now 1 tested device, and batteryPercentages becomes [1,0,1,0,2].
At device 1, batteryPercentages[1] == 0, so we move to the next device without testing.
At device 2, batteryPercentages[2] > 0, so there are now 2 tested devices, and batteryPercentages becomes [1,0,1,0,1].
At device 3, batteryPercentages[3] == 0, so we move to the next device without testing.
At device 4, batteryPercentages[4] > 0, so there are now 3 tested devices, and batteryPercentages stays the same.
So, the answer is 3.

Example 2:
Input: batteryPercentages = [0,1,2]
Output: 2
Explanation: Performing the test operations in order starting from device 0:
At device 0, batteryPercentages[0] == 0, so we move to the next device without testing.
At device 1, batteryPercentages[1] > 0, so there is now 1 tested device, and batteryPercentages becomes [0,1,1].
At device 2, batteryPercentages[2] > 0, so there are now 2 tested devices, and batteryPercentages stays the same.
So, the answer is 2.

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

统计已测试设备。

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

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

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

思路

思路是差分数组。暴力解就不展示了,思路是需要一个两层 for 循环,第一层 for 是去遍历每个设备,如果当前设备电量大于 0,则第二层 for 循环需要去遍历剩下的设备并对每个剩下的设备的电池百分比 - 1。

这道题的最优解是差分数组。还是需要遍历一遍 input 数组,遍历的时候,如果当前设备的电量大于 0,则 count++,count 记录的是已测试过的设备的数量。接着往之后的设备看,如果当前设备在按规则(电池百分比减少 1)减去电量之后,电量仍然大于 0,则 count++。最后返回的是 count。

复杂度

时间O(n)
空间O(1)

代码

Java实现

class Solution {
    public int countTestedDevices(int[] batteryPercentages) {
        int n = batteryPercentages.length;
		int count = 0;
		for (int i = 0; i < n; i++) {
			batteryPercentages[i] = Math.max(0, batteryPercentages[i] - count);
			if (batteryPercentages[i] > 0) {
				count++;
			}
		}
		return count;
    }
}
posted @ 2024-05-10 03:38  CNoodle  阅读(5)  评论(0编辑  收藏  举报