2024-06-29:用go语言,给定一个非零整数数组 nums
,
描述了一只蚂蚁根据数组元素的值向左或向右移动。
蚂蚁每次移动的步数取决于当前元素的正负号。
如果当前元素是负数,则向左移动相应步数;
如果是正数,则向右移动相应步数。
请计算蚂蚁返回到边界的次数。
边界是一个无限空间,在蚂蚁移动一个元素的步数后才会检查是否到达边界。
因此,只有当蚂蚁移动的距离为元素的绝对值时才算作达到了边界。
输入:nums = [2,3,-5]。
输出:1。
解释:第 1 步后,蚂蚁距边界右侧 2 单位远。
第 2 步后,蚂蚁距边界右侧 5 单位远。
第 3 步后,蚂蚁位于边界上。
所以答案是 1 。
答案2024-06-29:
chatgpt
题目来自leetcode3028。
大体步骤如下:
1.初始化变量:sum
存储当前蚂蚁移动的位置,ans
记录蚂蚁返回到边界的次数,初始值为 0。
2.迭代数组 nums
:
2.1.对于每个元素 x
:
2.1.1.将该元素的值加到 sum
上,即蚂蚁移动到的新位置。
2.1.2.如果 sum
等于 0,表示蚂蚁返回到了边界,将 ans
值加 1。
3.返回 ans
,即蚂蚁返回到边界的总次数。
总的时间复杂度分析:
- • 遍历整个数组
nums
需要 O(N) 的时间复杂度,其中 N 是nums
的长度。
总的额外空间复杂度分析:
- • 除了输入参数和返回值外,代码只使用了常数级的额外空间,因此额外空间复杂度为 O(1)。
综上所述,该算法的时间复杂度为 O(N),额外空间复杂度为 O(1)。
Go完整代码如下:
代码语言:javascript复制package main
import(
"fmt"
)
func returnToBoundaryCount(nums []int)(ans int){
sum :=0
for _, x :=range nums {
sum = x
if sum ==0{
ans
}
}
return
}
func main(){
nums :=[]int{2,3,-5}
fmt.Println(returnToBoundaryCount(nums))
}
Python完整代码如下:
代码语言:javascript复制# -*-coding:utf-8-*-
defreturn_to_boundary_count(nums):
ans =0
total_sum =0
for x in nums:
total_sum = x
if total_sum ==0:
ans =1
return ans
nums =[2,3,-5]
print(return_to_boundary_count(nums))