当前位置: 首页 > article >正文

leetcode 3356. 零数组变换 II 中等

给定一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] = [li, ri]

对于每个查询 queries[i]

  • 在 nums 的下标范围 [li, ri] 内选择一个下标 子集。
  • 将选中的每个下标对应的元素值减 1。

零数组 是指所有元素都等于 0 的数组。

如果在按顺序处理所有查询后,可以将 nums 转换为 零数组 ,则返回 true,否则返回 false

示例 1:

输入: nums = [1,0,1], queries = [[0,2]]

输出: true

解释:

  • 对于 i = 0:
    • 选择下标子集 [0, 2] 并将这些下标处的值减 1。
    • 数组将变为 [0, 0, 0],这是一个零数组。

示例 2:

输入: nums = [4,3,2,1], queries = [[1,3],[0,2]]

输出: false

解释:

  • 对于 i = 0: 
    • 选择下标子集 [1, 2, 3] 并将这些下标处的值减 1。
    • 数组将变为 [4, 2, 1, 0]
  • 对于 i = 1:
    • 选择下标子集 [0, 1, 2] 并将这些下标处的值减 1。
    • 数组将变为 [3, 1, 0, 0],这不是一个零数组。

提示:

  • 1 <= nums.length <= 10^5
  • 0 <= nums[i] <= 10^5
  • 1 <= queries.length <= 10^5
  • queries[i].length == 2
  • 0 <= li <= ri < nums.length

分析:和 3355 零数组变换 I 的方法类似,使用差分数组 + 二分答案解决。如果前 k 个查询即可让数组变为 0 数组,则 k + 1 个查询也可以。因此可以二分答案,检查中点是否能满足条件。

int minZeroArray(int* nums, int numsSize, int** queries, int queriesSize, int* queriesColSize) {int l=0,r=queriesSize,ans=-1;int diff[numsSize+5];diff[0]=nums[0];int flag=0;if(nums[0]>0)flag=1;for(int i=1;i<numsSize;++i){diff[i]=nums[i]-nums[i-1];if(nums[i]>0)flag=1;}if(!flag)return 0;while(l<r){int mid=(l+r)/2;int temp[numsSize+5],cnt[numsSize+5];for(int i=0;i<numsSize;++i)temp[i]=diff[i],cnt[i]=nums[i];for(int i=0;i<=mid;++i)temp[queries[i][0]]-=queries[i][2],temp[queries[i][1]+1]+=queries[i][2];cnt[0]=temp[0];if(cnt[0]>0){l=mid+1;continue;}int f=1;for(int i=1;i<numsSize;++i){cnt[i]=cnt[i-1]+temp[i];if(cnt[i]>0){l=mid+1;f=0;break;}}// printf("l=%d r=%d mid=%d ans=%d f=%d\n",l,r,mid,ans,f);if(f)ans=mid+1,r=mid;}return ans;
}
http://www.lryc.cn/news/2382142.html

相关文章:

  • 重拾GMP
  • 实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验
  • C++学习:六个月从基础到就业——C++11/14:其他语言特性
  • 【Linux笔记】——线程池项目与线程安全单例模式
  • 数据驱动的社会舆情监测与分析——用算法洞察世界脉动
  • OD 算法题 B卷 【最佳植树距离】
  • ZooKeeper 原理解析及优劣比较
  • 实战5:个性化数字艺术生成与销售
  • 是德科技 | 单通道448G未来之路:PAM4? PAM6? PAM8?
  • OceanBase 开发者大会,拥抱 Data*AI 战略,构建 AI 数据底座
  • STM32IIC协议基础及Cube配置
  • CNN vs ViT:图像世界的范式演进
  • cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins
  • 定时器的两种实现方式
  • Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter
  • [Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)
  • MacBook Air A2179(Intel版)安装macOS Catalina所需时间
  • AI在人力资源领域的应用:把握时代浪潮
  • 【VxWorks 实时操作系统(RTOS)】常用函数汇总
  • vr制作公司提供什么服务?
  • 下一代电子电气架构(EEA)的关键技术
  • matlab慕课学习3.5
  • 大语言模型(LLM)如何通过“思考时间”(即推理时的计算资源)提升推理能力
  • Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
  • Qt音视频开发过程中一个疑难杂症的解决方法/ffmpeg中采集本地音频设备无法触发超时回调
  • 基于注意力机制与iRMB模块的YOLOv11改进模型—高效轻量目标检测新范式
  • PEFT库PromptTuningConfig 配置
  • 操作系统----软考中级软件工程师(自用学习笔记)
  • SQL 多表关联与分组聚合:解密答题正确率分析
  • 基于 Redis 实现短信验证码登录功能的完整方案