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

【LeetCode - 每日1题】使数组元素都变为零的最少操作次数

🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)


🌵目录🌵

  • 难度 ⭐⭐⭐⭐⭐
  • 题目回顾
  • ✅解题思路
    • 💖概述
    • 💓核心思路
  • ✅代码实现
  • ✅复杂度分析
  • ✅测试用例验证
    • 🍼1. ​​示例 1(有效数独)​​
    • 🍶2. ​​示例 2(无效数独-行重复)​​
    • 🍺3. ​​边缘用例(空盘)​​
  • 💖总结
  • 🤝 期待与你共同进步
  • 📚 参考文档


难度 ⭐⭐⭐⭐⭐

本题要求高效处理多个查询,每个查询涉及一个连续整数数组,通过特定操作将所有元素变为零,求最少操作次数总和。核心在于数学推导和高效计算前缀和。


题目回顾

给你一个二维数组 queries,其中 queries[i] 形式为 [l r]。每个 queries[i] 表示了一个元素范围从l到 r
(包括 l 和 r )的整数数组 nums 。 在一次操作中,你可以:

  • 选择一个查询数组中的两个整数 a 和 b。
  • 将它们替换为 floor(a / 4) 和 floor(b / 4)。

你的任务是确定对于每个查询,将数组中的所有元素都变为零的 最少 操作次数。返回所有查询结果的总和。

示例 1:

输入: queries = [[1,2],[2,4]]

输出: 3

解释:

对于 queries[0]:

  • 初始数组为 nums = [1, 2]。 在第一次操作中,选择 nums[0] 和 nums[1]。数组变为 [0, 0]。
  • 所需的最小操作次数为 1。

对于 queries[1]:

  • 初始数组为 nums = [2, 3, 4]。
  • 在第一次操作中,选择 nums[0] 和 nums[2]。数组变为 [0, 3, 1]。
  • 在第二次操作中,选择 nums[1] 和 nums[2]。数组变为 [0, 0, 0]。
  • 所需的最小操作次数为 2。

输出为 1 + 2 = 3。

示例 2:

输入: queries = [[2,6]]

输出: 4

解释:

对于 queries[0]:

  • 初始数组为 nums = [2, 3, 4, 5, 6]。
  • 在第一次操作中,选择 nums[0] 和 nums[3]。数组变为 [0, 3, 4, 1, 6]。
  • 在第二次操作中,选择 nums[2] 和 nums[4]。数组变为 [0, 3, 1, 1, 1]。
  • 在第三次操作中,选择 nums[1] 和 nums[2]。数组变为 [0, 0, 0, 1, 1]。
  • 在第四次操作中,选择 nums[3]> 和 nums[4]。数组变为 [0, 0, 0, 0, 0]。
  • 所需的最小操作次数为 4。

输出为 4。

提示:

  • 1 <= queries.length <= 10**5
  • queries[i].length == 2 queries[i] == [l, r]
  • 1 <= l < r <= 10**9

✅解题思路

💖概述

  • 给定多个查询,每个查询为区间 [l, r],表示数组包含从 l到 r的连续整数。
  • 每次操作选择数组中的两个整数 a和 b,替换为 floor(a/4)和 floor(b/4)。
  • 目标:计算每个查询的最少操作次数(使所有元素为零),并返回所有查询结果的总和。

💓核心思路

  1. ​​独立计算每个数的操作次数​​

    • 定义 g(n):将单个整数 n变为零所需的最少操作次数。
      • 递归关系:g(n) = 1 + g(n // 4)(n > 0),g(0) = 0。
      • 例如:
        • g(1) = 1(1 // 4 = 0)。
        • g(4) = 2(4 // 4 = 1,再操作一次得 0)。
    • 观察规律:g(n) = k当 n ∈ [4^{k-1}, 4^k - 1]。
      • k=1:[1, 3]
      • k=2:[4, 15]
      • k=3:[16, 63]
http://www.xdnf.cn/news/20550.html

相关文章:

  • [光学原理与应用-421]:非线性光学 - 数字信号处理中的线性与非线性运算
  • 【医学影像 AI】YoloCurvSeg:仅需标注一个带噪骨架即可实现血管状曲线结构分割
  • idf--esp32的看门狗menuconfig
  • JAVA快速学习(二)
  • xftp断网后提示错误如何继续下载?
  • Python自学12 - 常用数据结构之字典
  • 基于接口的事件机制
  • python入门常用知识
  • Phthon3 学习记录-0707
  • 积分球的使用——简易版
  • 强化学习入门:从零开始实现DDQN
  • Ai8051 2.4寸320*240 ILI9341 I8080接口驱动
  • 人工智能学习:基于seq2seq模型架构实现翻译
  • 项目初始化上传git
  • Qemu-NUC980(四):SDRAM Interface Controller
  • 什么是“二合一矫平机”?——一篇技术科普
  • 主流的开源协议(MIT,Apache,GPL v2/v3)
  • Qt编程之信号与槽
  • 吴恩达机器学习(八)
  • make时设置链接器选项的2种方法
  • 【操作系统-Day 25】死锁 (Deadlock):揭秘多线程编程的“终极杀手”
  • Zoom AI 技术架构研究:联合式方法与多模态集成
  • 【LeetCode热题100道笔记】翻转二叉树
  • python炒股
  • C++ 20 新增特性以及代码示例
  • 同态加密库(Google FHE)
  • 神经网络的初始化:权重与偏置的数学策略
  • C# WinForm分页控件实现与使用详解
  • B.50.10.09-RPC核心原理与电商应用
  • MATLAB R2025a安装配置及使用教程(超详细保姆级教程)