说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
边界上有一只蚂蚁,它有时向 左 走,有时向 右 走。
给你一个 非零 整数数组 nums
。蚂蚁会按顺序读取 nums
中的元素,从第一个元素开始直到结束。每一步,蚂蚁会根据当前元素的值移动:
- 如果
nums[i] < 0
,向 左 移动-nums[i]
单位。 - 如果
nums[i] > 0
,向 右 移动nums[i]
单位。
返回蚂蚁 返回 到边界上的次数。
注意:
- 边界两侧有无限的空间。
- 只有在蚂蚁移动了
|nums[i]|
单位后才检查它是否位于边界上。换句话说,如果蚂蚁只是在移动过程中穿过了边界,则不会计算在内。
示例 1:
输入: nums = [2,3,-5] 输出: 1 解释: 第 1 步后,蚂蚁距边界右侧 2 单位远。 第 2 步后,蚂蚁距边界右侧 5 单位远。 第 3 步后,蚂蚁位于边界上。 所以答案是 1 。
示例 2:
输入: nums = [3,2,-3,-4] 输出: 0 解释: 第 1 步后,蚂蚁距边界右侧 3 单位远。 第 2 步后,蚂蚁距边界右侧 5 单位远。 第 3 步后,蚂蚁距边界右侧 2 单位远。 第 4 步后,蚂蚁距边界左侧 2 单位远。 蚂蚁从未返回到边界上,所以答案是 0 。
提示:
1 <= nums.length <= 100
-10 <= nums[i] <= 10
nums[i] != 0
解题思路
这是一道比较简单的题目,我们直接模拟行为进行判断即可,蚂蚁初始化位置为0,向左移动x时距离要-x
,向右移动x时距离要+x
,我们只需要判断移动后的距离是否为0即可,使用一个变量记录移动到边界(即距离 = 0)的次数,最后返回即可。
AC代码
/** * @param {number[]} nums * @return {number} */ var returnToBoundaryCount = function(nums) { let sum = 0,cnt = 0; for(const num of nums){ sum += Number(num); if(sum === 0) cnt++; } return cnt; };
公众号
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。