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

[每日一题] 3355. 零数组变换 i

文章目录

      • 1. 题目链接
      • 2. 题目描述
      • 3. 题目示例
      • 4. 解题思路
      • 5. 题解代码
      • 6. 复杂度分析

1. 题目链接


3355. 零数组变换 I - 力扣(LeetCode)

2. 题目描述


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

对于每个查询 queries[i]

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

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

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


3. 题目示例


示例 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],这不是一个零数组。

4. 解题思路


  1. 问题理解
    • 给定一个整数数组 nums 和一个查询数组 queries,其中每个查询 queries[i] = [l, r] 表示对 nums 的子数组 nums[l..r] 中的每个元素减一。
    • 判断是否可以通过执行所有查询,将 nums 的所有元素变为 0。
  2. 关键思路
    • 差分数组:使用差分数组高效处理区间操作(如批量减一)。
    • 前缀和计算:通过差分数组的前缀和得到每个位置的实际操作次数。
    • 可行性判断:检查每个元素的值是否可以被对应的操作次数减到 0。
  3. 算法流程
    • 初始化差分数组 diff(长度为 n + 1)。
    • 遍历每个查询 [l, r],更新差分数组:
      • diff[l]++ 表示从 l 开始的所有元素加一(等价于后续操作中减一)。
      • diff[r + 1]-- 表示从 r + 1 开始的所有元素减一(抵消区间外的影响)。
    • 计算差分数组的前缀和 sumD,得到每个位置的实际操作次数。
    • 检查 nums[i] 是否 ≤ sumD(即能否通过操作减到 0)。

5. 题解代码


class Solution {public boolean isZeroArray(int[] nums, int[][] queries) {int n = nums.length;// 差分数组,用于记录区间操作的影响int[] diff = new int[n + 1];// 处理每个查询,更新差分数组for (int[] q : queries) {int l = q[0], r = q[1];// 区间 [l, r] 内的元素都加一diff[l]++;// 差分数组的 r+1 位置减一,用于抵消区间外的影响diff[r + 1]--;}// 计算差分数组的前缀和,得到每个位置的实际操作次数int sumD = 0;for (int i = 0; i < n; i++) {sumD += diff[i];// 如果 nums[i] 的值大于其被减去的次数,则无法变为 0if (nums[i] > sumD) {return false;}}return true;}
}

6. 复杂度分析


  1. 时间复杂度
    • 初始化差分数组:O(n)。
    • 处理查询:O(m),其中 m 是查询数量。
    • 计算前缀和和检查:O(n)。
    • 总体时间复杂度:O(n + m)。
  2. 空间复杂度
    • 差分数组:O(n)。
    • 其他变量:O(1)。
    • 总体空间复杂度:O(n)。
http://www.xdnf.cn/news/542125.html

相关文章:

  • 如何删除 HP 笔记本电脑中的所有数据:3 种解决方案说明
  • [Java] idea的调试介绍
  • win7无线网络名称显示为编码,连接对应网络不方便【解决办法】
  • Journal of Real-Time Image Processing 投稿过程
  • 推扫式高光谱相机VIX-N230重磅发布——开启精准成像新时代
  • Python爬虫(30)Python爬虫高阶:Selenium+Scrapy+Playwright融合架构,攻克动态页面与高反爬场景
  • 数论:数学王国的密码学
  • 新凌印 4.2.0 | 国内短视频去水印下载~图集下载
  • CodeBuddy全新升级:体验Craft智能体的对话式编程革命
  • 在 Excel 中使用东方仙盟软件————仙盟创梦IDE
  • Awesome ChatGPT Prompts:释放AI对话潜力的开源利器
  • java每日精进 5.20【MyBatis 联表分页查询】
  • NODE-I916 I721模块化电脑发布,AI算力与超低功耗的完美平衡
  • Java 06API时间类
  • CHI中ordering的抽象
  • 第四章、SKRL(2): API(Models and Model instantiators)
  • 银行反欺诈理论、方法与实践总结(下):解决方案
  • 【动手学深度学习】1.1~1.2 机器学习及其关键组件
  • 珈和科技贺李德仁院士荣膺国际数字地球学会会士:以时空智能赋能可持续发展目标 绘就数字地球未来蓝图
  • 基于pycharm,python,flask,tensorflow,keras,orm,mysql,在线深度学习sql语句检测系统
  • HarmonyOS5云服务技术分享--云缓存快速上手指南
  • 创建型:建造者模式
  • 跨域_Cross-origin resource sharing
  • SpringBoot-6-在IDEA中配置SpringBoot的Web开发测试环境
  • Spring Boot 多参数统一加解密方案详解:从原理到实战
  • 物流项目第三期(统一网关、工厂模式运用)
  • 普通人如何开发并训练自己的脑力?
  • npm vs npx 终极指南:从原理到实战的深度对比 全面解析包管理器与包执行器的核心差异,助你精准选择工具
  • 零基础深入解析 ngx_http_session_log_module
  • 视频太大?用魔影工厂压缩并转MP4,画质不打折!