欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Leetcode 3354 Make Array Elements Equal to Zero

Leetcode 3354 Make Array Elements Equal to Zero

2025/2/2 2:33:59 来源:https://blog.csdn.net/xxxmmc/article/details/143855373  浏览:    关键词:Leetcode 3354 Make Array Elements Equal to Zero

题意:给定一个数组arr,有个cur使得nums[curr] == 0,一开始可以选择向左向右移动, 如果nums[cur] > 0, 那就 nums[cur] -= 1,并且移动的方向变更,求多少个cur的位置以及向左向右的方式能够使nums中的所有数字变化成0(想象一个球里面撞来撞去)

https://leetcode.com/problems/make-array-elements-equal-to-zero/description/

题解:本质上是找到一个每一个nums[cur] == 0的点,这个位置的左边所有数的和以及右边所有数的和相等或者相差1,如果是相等的话答案+2,如果相差1的话答案+1
由此想到前缀和

preS[i] == preS[n] - preS[i] 答案+2
preS[i] + 1 == preS[n] - preS[i] || preS[i] == preS[n] - preS[i] + 1 答案+1

class Solution {
public:int countValidSelections(vector<int>& nums) {int n = nums.size();int res = 0;vector<int> preS(n+1, 0);for(int i = 1; i < n+1; i++) {preS[i] = preS[i-1] + nums[i-1];}for(int i = 0; i < n; i++) {if(nums[i] == 0) {if(preS[i] == preS[n] - preS[i]) {res += 2;} else if(preS[i] + 1 == preS[n] - preS[i] || preS[i] == preS[n] - preS[i] + 1) {res += 1;}}}return res;}
};

时间复杂度 O ( n ) O(n) O(n)
空间复杂度 O ( n ) O(n) O(n)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com