3354. 使数组元素等于零
给你一个整数数组 nums
。
开始时,选择一个满足 nums[curr] == 0
的起始位置 curr
,并选择一个移动 方向 :向左或者向右。
此后,你需要重复下面的过程:
- 如果
curr
超过范围[0, n - 1]
,过程结束。 - 如果
nums[curr] == 0
,沿当前方向继续移动:如果向右移,则 递增curr
;如果向左移,则 递减curr
。 - 如果
nums[curr] > 0
:- 将
nums[curr]
减 1 。 - 反转 移动方向(向左变向右,反之亦然)。
- 沿新方向移动一步。
- 将
如果在结束整个过程后,nums
中的所有元素都变为 0 ,则认为选出的初始位置和移动方向 有效 。
返回可能的有效选择方案数目。
class Solution: def countValidSelections(self, nums: List[int]) -> int: left_sum = [0 for _ in nums] right_sum = [0 for _ in nums] left_sum[0] = 0 right_sum[0] = 0 for i,n in enumerate(nums): if i>0: left_sum[i] = left_sum[i-1] + nums[i-1] for i,n in enumerate(nums[::-1]): if i>0: right_sum[i] = right_sum[i-1] + nums[::-1][i-1] right_sum = right_sum[::-1] # print(left_sum) # print(right_sum) ans = 0 for i,n in enumerate(nums): # print(i,n) if n==0 and left_sum[i]==right_sum[i]: ans += 2 elif n==0 and abs(left_sum[i]-right_sum[i])==1: ans += 1 return ans
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程