An ant is on a boundary. It sometimes goes **left** and sometimes **right**.

You are given an array of **non-zero** integers `nums`

. The ant starts reading `nums`

from the first element of it to its end. At each step, it moves according to the value of the current element:

- If
`nums[i] < 0`

, it moves**left**by`-nums[i]`

units. - If
`nums[i] > 0`

, it moves**right**by`nums[i]`

units.

Return *the number of times the ant returns to the boundary.*

**Notes:**

- There is an infinite space on both sides of the boundary.
- We check whether the ant is on the boundary only after it has moved
`|nums[i]|`

units. In other words, if the ant crosses the boundary during its movement, it does not count.

**Example 1:**

Input:nums = [2,3,-5]Output:1Explanation:After the first step, the ant is 2 steps to the right of the boundary. After the second step, the ant is 5 steps to the right of the boundary. After the third step, the ant is on the boundary. So the answer is 1.

**Example 2:**

Input:nums = [3,2,-3,-4]Output:0Explanation:After the first step, the ant is 3 steps to the right of the boundary. After the second step, the ant is 5 steps to the right of the boundary. After the third step, the ant is 2 steps to the right of the boundary. After the fourth step, the ant is 2 steps to the left of the boundary. The ant never returned to the boundary, so the answer is 0.

**Constraints:**

`1 <= nums.length <= 100`

`-10 <= nums[i] <= 10`

`nums[i] != 0`

**Solution: Simulation **

Simulate the position of the ant by summing up the numbers. If the position is zero (at boundary), increase the answer by 1.

Time complexity: O(n)

Space complexity: O(1)

## C++

1 2 3 4 5 6 7 8 9 10 |
class Solution { public: int returnToBoundaryCount(vector<int>& nums) { int ans = 0; int pos = 0; for (int x : nums) ans += !(pos += x); return ans; } }; |