Welcome to Subscribe On Youtube
2960. Count Tested Devices After Test Operations
Description
You are given a 0indexed integer array batteryPercentages
having length n
, denoting the battery percentages of n
0indexed 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 than0
: Increment the count of tested devices.
 Decrease the battery percentage of all devices with indices
j
in the range[i + 1, n  1]
by1
, ensuring their battery percentage never goes below0
, 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
Solutions
Solution 1: Simulation
Assume that the current number of devices we have tested is $ans$. When testing a new device $i$, its remaining battery is $\max(0, batteryPercentages[i]  ans)$. If the remaining battery is greater than $0$, it means this device can be tested, and we need to increase $ans$ by $1$.
Finally, return $ans$.
The time complexity is $O(n)$, where $n$ is the length of the array. The space complexity is $O(1)$.

class Solution { public int countTestedDevices(int[] batteryPercentages) { int ans = 0; for (int x : batteryPercentages) { x = ans; if (x > 0) { ++ans; } } return ans; } }

class Solution { public: int countTestedDevices(vector<int>& batteryPercentages) { int ans = 0; for (int x : batteryPercentages) { x = ans; if (x > 0) { ++ans; } } return ans; } };

class Solution: def countTestedDevices(self, batteryPercentages: List[int]) > int: ans = 0 for x in batteryPercentages: x = ans ans += x > 0 return ans

func countTestedDevices(batteryPercentages []int) (ans int) { for _, x := range batteryPercentages { x = ans if x > 0 { ans++ } } return }

function countTestedDevices(batteryPercentages: number[]): number { let ans = 0; for (let x of batteryPercentages) { x = ans; if (x > 0) { ++ans; } } return ans; }

impl Solution { pub fn count_tested_devices(battery_percentages: Vec<i32>) > i32 { let mut ans = 0; for x in battery_percentages { ans += if x > ans { 1 } else { 0 }; } ans } }