首页 > 其他分享 >3354. 使数组元素等于零

3354. 使数组元素等于零

时间:2024-11-19 23:30:38浏览次数:1  
标签:right curr nums 等于零 3354 数组 ans sum left

 

给你一个整数数组 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

 

标签:right,curr,nums,等于零,3354,数组,ans,sum,left
From: https://www.cnblogs.com/xxlm/p/18555846

相关文章

  • 数据结构复习 ---- 顺序表(数组)--定长版本+不定长版本
    //我的思考************////1.顺序表是一种线性结构(一对一关系),每个数据都是有一个前驱(除了第一个元素)和一个后继(除了最后一个元素)//2.顺序表分为定长顺序表(指针存储固定数量的元素)和不定长顺序表(顾名思义。。。使用较多)----类似于动态数组,就像Go语言中的切片,Pytho......
  • 2024/11/18日 日志 数据结构实验(1)---链表逆置、线性表A,B顺序存储合并、双向循环链表应
    链表逆置题目:https://pintia.cn/problem-sets/1855808612225744896/exam/problems/type/6?problemSetProblemId=1855808768018968576解答:点击查看代码structListNode*reverse(structListNode*head){structListNode*prev=NULL;structListNode*current=head;......
  • 字节青训-小C的类二进制拼图、小M的奶酪问题、小T的密码变换规则、数值操作的期望计算
    目录一、小C的类二进制拼图问题描述测试样例解题思路:问题理解数据结构选择算法步骤第一版代码:最终代码:  二、小M的奶酪问题问题描述测试样例解题思路:问题理解数据结构选择算法步骤 最终代码:运行结果: 三、小T的密码变换规则问题描述测试样例 解题......
  • 字节青训-判断数组是否单调、判断回旋镖的存在、字符串解码问题、小F的矩阵值调整、数
    目录一、判断数组是否单调问题描述测试样例解题思路:解题思路数据结构选择算法步骤 最终代码:运行结果:​编辑  二、判断回旋镖的存在问题描述测试样例解题思路: 解题思路算法步骤最终代码:运行结果:​编辑 三、字符串解码问题问题描述测试样例 解题思......
  • 724. 寻找数组的中心下标
    题目自己写的classSolution{public:intpivotIndex(vector<int>&nums){intn=nums.size();vector<int>s(n,0);s[0]=nums[0];for(inti=1;i!=n;++i)s[i]=s[i-1]+nums[i];......
  • 189. 轮转数组
    题目自己写的老拉了classSolution{public:voidrotate(vector<int>&nums,intk){constintn=nums.size();intans[100010]={};for(inti=0;i<n;++i)ans[(i+k)%n]=nums[i];for(inti=......
  • 洛谷题单指南-二叉堆与树状数组-P5677 [GZOI2017] 配对统计
    原题链接:https://www.luogu.com.cn/problem/P5677题意解读:所谓好的配对,通过分析公式∣ax−ay∣≤∣ax−ai∣(i≠x),可以得知就是一个ax与其差的绝对值最小的形成的配对,在数轴上就是距离ax最近的点ay,配对是下标(x,y),给定若干个区间[l,r],每个区间的配对数*区间编号的累加。解题思路:......
  • Scala(多维数组)
    最典型的的多维数组就是二维数组。objecttest3{defmain(args:Array[String]):Unit={//二维数组//2.1创建方式1valarr5=Array.ofDim[Int](2,2)//2行2列//2.2访问数组的元素arr5(0)(0)=1arr5(0)(1)=2arr5(1)(0)=3......
  • 新增时间段,但是不能与原来数组中的时间段有重叠
    如果用户添加的时间段,在上面显示时间段有重复的时间范围,则提示如下内容:执行函数的入参内容打印:点击查看实现代码exportfunctionaddTimeRange(timeRanges,newTimeRange){console.log('原有的时间范围的数组timeRanges',timeRanges)console.log('新的时间范围newTi......
  • 记录个Java/Groovy的小问题:空字符串调用split函数返回非空数组
    问题复现最近写了一个groovy替换程序增量流水线脚本(会Java也能看懂),示意脚本如下://获取文件列表方法deflistFiles(folder){defoutput=sh(script:"ls${folder}",returnStdout:true).trim()returnoutput.split('\n')asList}//调用以上方法获取lib目录下......