首页 > 其他分享 >零数组变换II

零数组变换II

时间:2025-01-21 20:55:38浏览次数:1  
标签:return nums 变换 II int 数组 queries check

思路

对一段区间加减并且进行多次操作可以联想到差分算法,并且queries数组比较大,可以使用二分查找加快效率。这里的代码个人觉得lambda表达式更加简洁

代码

  int minZeroArray(vector<int>& nums, vector<vector<int>>& queries) {
        int n=nums.size(),q=queries.size();
        auto check=[&](int k){
            vector<int>a(n+1);
            for(int i=0;i<k;i++){
                auto&c=queries[i]; 
                a[c[0]]+=c[2];//设置一个数组将val进行操作的变化值存储,不用对nums构建差分数组
                a[c[1]+1]-=c[2];
            }
            int sum=0;
            for(int i=0;i<n;i++){
                sum+=a[i];//再求和获得每一个位置上的进行操作赋予的值
                if(nums[i]>sum)return false;//判断目前的val的操作是否能实现把所有nums元素都变成0,
                //如果nums[i]>sum说明还有数值没有减到0,需要继续向下计算
            }
            return true;
        };
        if(!check(q))return -1;
        int head=-1,tail=q;
        while(head+1<tail){
            int mid=(head+tail)/2;//这里直接套用而二分的模版
            if(!check(mid))head=mid;//这里返回为假还需要增大k值
            else tail=mid;
        }
        return tail;
    }

标签:return,nums,变换,II,int,数组,queries,check
From: https://www.cnblogs.com/hyien/p/18684386

相关文章

  • 2090. 半径为 k 的子数组平均值
    【题目】:2090.半径为k的子数组平均值classSolution{public:vector<int>getAverages(vector<int>&nums,intk){vector<int>res(nums.size(),-1);longcurSum=0;//记录当前滑窗内的数值和for(intl=0,r=0;r<nums.s......
  • 33. 搜索旋转排序数组
    整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始计数)。例如,[0,1,2,4,5,6,7]在下标3处经......
  • C语言中的二维数组
    1.二维数组的定义类型说明符数组名 [常量表达式][常量表达式];(1).类型说明符      表示二维数组中数据元素的类型 (2).数组名          标识符 (3).[常量表达式][常量表达式]      第1维       第2维   ......
  • 树状数组
    Question01[P3374树状数组一]模板题Code#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+7;classTree{ public: inlinevoidscan(longlong*_data,int_size){ size=_size; for(inti=1;i<=size;i++)_data[i]+=_data[i-1]; for(inti......
  • 5、原来可以这样理解C语言_数组
    目录​编辑1.数组的概念2.⼀维数组的创建和初始化2.1数组创建⼀维数组创建的基本语法如下:2.2数组的初始化2.3数组的类型3.⼀维数组的使⽤ 3.1数组下标3.2数组元素的打印3.3数组的输⼊4.⼀维数组在内存中的存储5.sizeof计算数组元素个数6.⼆维数组......
  • 树状数组
    l(x)=x-lowbit(x)+1。即,l(x)是c[x]管辖范围的左端点。对于任意正整数x,总能将x表示成s*2^{k+1}+2^k的形式,其中lowbit(x)=2^k。下面「c[x]和c[y]不交」指c[x]的管辖范围和c[y]的管辖范围不相交,即[l(x),x]和[l(y),y]不相交。「c[x]包含于c[y]」......
  • 剑指offer面试题3:数组中重复的数字(Python实现)
    """面试题3:数组中重复的数字在一个长度为n的数组里所有数字都在0~n-1的范围内,某些数字是重复的,找出任意一个重复的数字"""defduplicate1(numbers:list,length:int)->int:"""修改原数组"""ifnumbers==[]orlength<=0:......
  • 【leetcode 22】541. 反转字符串II
    思路:其实在遍历字符串的过程中,只要让i+=(2*k),i每次移动2*k就可以了,然后判断是否需要有反转的区间。因为要找的也就是每2*k区间的起点,这样写,程序会高效很多。classSolution{publicStringreverseStr(Strings,intk){char[]ch=s.toCh......
  • java —— 数组(超详细教程)
    介绍:这期讲的是java的原生数组,也就是list(静态空间),空间是写死的;后期的ArrayList是动态数组。我们需要先认识基础的格式,方便后面的ArrayList学习。一、创建数组(一)方法一:1、先声明,再定义长度。publicstaticvoidmain(String[]args){//声明变量int[......
  • Go语言【Gin框架】:JSON、AsciiJSON、PureJSON和SecureJSON的区别
    在Go语言中,JSON、AsciiJSON、PureJSON和SecureJSON是Gin框架用于发送JSON响应的方法。1.c.JSON功能:将提供的数据序列化为标准的JSON格式,并将其作为HTTP响应发送给客户端。特点:支持Unicode字符,无需将非ASCII字符转义。某些字符(如<、>和&)会被自动转义为相应的Unicode......